mongodb find()顺序与模式顺序不同

时间:2012-10-18 15:24:22

标签: json mongodb

db.blog.save({ title : "My First Post", author: {name : "Jane", id : 1}})

由于关键顺序不匹配,下面应该返回什么?

db.blog.find({"author" : {"id" : 1, "name" : "Jane"}})

编辑:

基于官方mongodb documentation,键序必须匹配(至少findOne())。它不会使用db.blog.findOne({"author" : {"id" : 1, "name" : "Jane"}})

返回仅匹配对象

3 个答案:

答案 0 :(得分:3)

查询选择器中键的顺序无关紧要。它不需要与添加您正在搜索的文档时使用的键的顺序相匹配。

<强>更新

如果您只是在寻找与订单无关的基于嵌入式文档进行查询的方式,则需要使用点表示法:

db.blog.find({"author.id" : 1, "author.name" : "Jane"})

答案 1 :(得分:0)

根据JSON definition,关键顺序并不重要。

An object is an unordered collection of zero or more name/value pairs

我对MongoDB一无所知,但我认为它遵循JSON的常规规则,此时它应该返回“我的第一个帖子”条目。

答案 2 :(得分:0)

正常情况下,正如@JohnnyHK所述,查询键的顺序无关紧要,除了你所显示的例子:

db.blog.find({"author" : {"id" : 1, "name" : "Jane"}})

此查询不会返回完全不匹配的结果。使用他显示的查询:

db.blog.find({"author.id" : 1, "author.name" : "Jane"})

将是关键订单独立。造成这种差异的原因是因为在第一个查询中,您正在按对象搜索,因此查询器实际上会搜索该对象(最简单的术语)。这同样适用于在包含一组子文档的字段上创建的索引,顺序也很重要。