在使用嵌套对象表示法查询mongoDB时,我遇到一个问题:
db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count()
0
db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
5
我看不出我做错了什么。我期望嵌套对象表示法返回与点表示法查询相同的结果。我哪里错了?
发布于 2013-04-15 02:27:56
db.messages.find( { headers : { From: "reservations@marriott.com" } } )
这将查询headers
等于{ From: ... }
的文档,即不包含其他字段。
db.messages.find( { 'headers.From': "reservations@marriott.com" } )
这只会查看headers.From
字段,不受headers
中包含或缺少的其他字段的影响。
发布于 2013-04-15 02:28:19
这两种查询机制以不同的方式工作,如the docs的子文档部分所建议的那样
当字段包含嵌入的文档(即,子文档)时,您可以将整个子文档指定为字段的值,或者使用点表示法进入子文档,以指定子文档中各个字段的值
子文档内的相等匹配如果子文档与指定的子文档(包括字段顺序)完全匹配,则选择文档。
在下面的示例中,查询匹配其中字段producer的值是一个子文档的所有文档,该子文档仅包含值为'ABC123'
的字段company
和值为'123 Street'
的字段address
,顺序如下:
db.inventory.find( {
producer: {
company: 'ABC123',
address: '123 Street'
}
});
https://stackoverflow.com/questions/16002659
复制相似问题