MongoDB在点表示法中使用负整数索引时是否应该报错?
MongoDB 负值点表示法查询行为说明
- MongoDB的点表示法是通用的嵌套字段匹配规则,不会提前做「数组索引必须为非负整数」的语法校验,因为该语法同时适用于匹配嵌套对象的字段名。如果存在结构为
{"a": {"-1": "foo"}}的文档,使用查询db.c.find({"a.-1": "foo"})可以成功命中该文档,所以该语法本身合法,不存在语法错误,自然不会触发报错。 - 当查询对象为数组时,数组元素的索引默认是从0开始的非负整数,
a.-1对应的负数字符串无法匹配到数组的任何下标位置,因此不会返回任何结果,属于无匹配文档的正常表现,而非语法问题。 - 注意不要和更新操作中的负索引语法混淆:MongoDB在更新数组的操作中支持
$[-1]专用位置运算符,可用于指代数组的最后一个元素,这是更新场景的特殊语法,和查询场景下点表示法的a.-1逻辑完全不同,不要混用。
内容的提问来源于stack exchange,提问作者fgalan
相关产品推荐
相关产品推荐

