使用嵌套对象表示法查询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: ... } 的文档,即不包含其他字段 .
headers
{ From: ... }
db.messages.find( { 'headers.From': "reservations@marriott.com" } )
这仅查看 headers.From 字段,不受 headers 中包含或缺失的其他字段的影响 .
headers.From
Dot-notation docs
这两个查询机制以不同的方式工作,如the docs中Subbocuments部分所示:
当字段包含嵌入的文档(即子文档)时,您可以将整个子文档指定为字段的值,或者使用点表示法“到达”子文档,以指定子文档中各个字段的值:
如果子文档完全匹配指定的子文档(包括字段顺序),则子文档内的等式匹配选择文档 .
在下面的示例中,查询匹配所有文档,其中字段生成器的值是一个子文档,其中只包含值为 'ABC123' 的字段 company ,字段 address 的值为 '123 Street' ,具体顺序如下:
'ABC123'
company
address
'123 Street'
db.inventory.find( { producer: { company: 'ABC123', address: '123 Street' } });
2 回答
db.messages.find( { headers : { From: "reservations@marriott.com" } } )
这查询
headers
等于{ From: ... }
的文档,即不包含其他字段 .db.messages.find( { 'headers.From': "reservations@marriott.com" } )
这仅查看
headers.From
字段,不受headers
中包含或缺失的其他字段的影响 .Dot-notation docs
这两个查询机制以不同的方式工作,如the docs中Subbocuments部分所示:
当字段包含嵌入的文档(即子文档)时,您可以将整个子文档指定为字段的值,或者使用点表示法“到达”子文档,以指定子文档中各个字段的值:
如果子文档完全匹配指定的子文档(包括字段顺序),则子文档内的等式匹配选择文档 .
在下面的示例中,查询匹配所有文档,其中字段生成器的值是一个子文档,其中只包含值为
'ABC123'
的字段company
,字段address
的值为'123 Street'
,具体顺序如下: