如何查询嵌套对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

使用嵌套对象表示法查询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部分的文档中所建议:

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

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

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

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

扫码关注云+社区