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

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

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

编辑:

根据官方 mongodb文档,keyorder 必须匹配(至少 for findOne())。它不会使用返回仅匹配对象db.blog.findOne({"author" : {"id" : 1, "name" : "Jane"}})

4

3 回答 3

3

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

更新

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

db.blog.find({"author.id" : 1, "author.name" : "Jane"})
于 2012-10-18T15:33:12.330 回答
0

根据JSON 定义,键顺序无关紧要。

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

我对 MongoDB 一无所知,但我认为它遵循 JSON 的正常规则,此时它应该返回“My First Post”条目。

于 2012-10-18T15:33:09.067 回答
0

通常,正如@JohnnyHK 所述,查询键的顺序无关紧要,除了您显示的示例:

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

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

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

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

于 2012-10-18T16:51:27.043 回答