如何查询嵌套对象?

使用嵌套对象表示法查询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包含或丢失的其他字段的影响。


点符号文档

这两个查询机制以不同的方式工作,如在子文档部分的文档中所build议的 :

当该字段包含embedded式文档(即子文档 )时,您可以指定整个子文档作为字段的值,或者使用点符号“到达” 子文档 ,以指定子文档中各个字段的值:

如果子文档与指定的子文档(包括字段顺序)完全匹配,则子文档中的相等匹配将select文档。


在以下示例中,查询匹配字段生产者的值为仅包含值为'ABC123'的字段company所有文档,字段address的值为'123 Street' ,具体顺序如下:

 db.inventory.find( { producer: { company: 'ABC123', address: '123 Street' } });