如何查询嵌套对象?
使用嵌套对象表示法查询mongoDB时遇到问题:
db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count()
0
db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
5
我看不到我做错了什么。 我期待嵌套对象符号返回与点符号查询相同的结果。 我错在哪里?
db.messages.find( { headers : { From: "reservations@marriott.com" } } )
这将查询headers
等于{ From: ... }
文档,即不包含其他字段。
db.messages.find( { 'headers.From': "reservations@marriott.com" } )
这只会查看headers.From
字段,而不受headers
包含或缺少的其他字段的影响。
点符号文档
这两个查询机制以不同的方式工作,正如Subdocuments部分的文档中所建议的:
当该字段包含嵌入文档(即子文档)时,可以将整个子文档指定为字段的值,或者使用点符号“到达”子文档,以指定子文档中各个字段的值:
如果子文档与指定的子文档完全匹配(包括字段顺序),则子文档中的相等匹配会选择文档。
在以下示例中,查询匹配字段生产者的值为仅包含值为'ABC123'
的字段company
所有文档,并且字段address
的值为'123 Street'
,具体顺序如下:
db.inventory.find( {
producer: {
company: 'ABC123',
address: '123 Street'
}
});
链接地址: http://www.djcxy.com/p/86405.html