Object数据的 Key 限制与错误说明不同、更新Object时没有进行Key验证

Object数据的 Key 限制与错误说明并不同

(注:这里的Object不是指Class,而是指在Class里面的一行类型为Object的行)

假设我们尝试新增一个包含一下Object数据的LcObject

{"he.llo":"world"}

会返回错误 code: 105, error: Invalid key name. Keys are case-sensitive and 'a-zA-Z0-9_' are the only valid characters.Invalid BSON field name he.llo 。根据错误说明,只有 a-zA-Z0-9_ 是有效。

然而, 实际上连同中文字及除了 . 之外的符号, 也是可以正常用作Object的Key的。如下面这个Object是可以正常添加的。

{  "中文字及符号_|}{?><都没有问题": "world"}

更新Object时没有进行Key验证

如果我们并不是创建新LcObject,而是修改现有LCObject的话, 则不会套用Key验证。
如下面这个LCObject虽然不能作为新LCObject创建,但如果是修改现有的LCObject的话,则能够顺利进行修改

{"he.llo":"world"}

实际上连同中文字及除了 . 之外的符号, 也是可以正常用作Object的Key的。如下面这个Object是可以正常添加的。

这是 bug,请只使用大小写字母、数字和下划线作 key

基于兼容性考虑这个bug应该是不会修复的吧(应该有颇多程序都误用了特殊符号作为ID)
之所以不建议使用特殊符号是因为会有效能影响吗?(影响到索引…?)

抱歉,之前的回复有误。我之前没有仔细看原帖,以为说的是 Class 的字段名。如果是 object 类型的字段之中的 key,是可以使用中文和特殊符号的。报错的原因是不能使用 .,不能使用 . 的原因是因为点号有特殊用途,这里的报错信息有误,我会在内部记录这个问题。另外更新 object 时也应该验证,这个问题也会反馈给相关同事。

非常感谢向我们反馈问题。

1 人赞了这个帖子.