首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何查询嵌套对象?

如何查询嵌套对象?
EN

Stack Overflow用户
提问于 2013-04-15 02:21:50
回答 2查看 215K关注 0票数 249

在使用嵌套对象表示法查询mongoDB时,我遇到一个问题:

db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count()
0
db.messages.find( { 'headers.From': "reservations@marriott.com" }  ).count()
5

我看不出我做错了什么。我期望嵌套对象表示法返回与点表示法查询相同的结果。我哪里错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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中包含或缺少的其他字段的影响。

Dot-notation docs

票数 499
EN

Stack Overflow用户

发布于 2013-04-15 02:28:19

这两种查询机制以不同的方式工作,如the docs的子文档部分所建议的那样

当字段包含嵌入的文档(即,子文档)时,您可以将整个子文档指定为字段的值,或者使用点表示法进入子文档,以指定子文档中各个字段的值

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

在下面的示例中,查询匹配其中字段producer的值是一个子文档的所有文档,该子文档仅包含值为'ABC123'的字段company和值为'123 Street'的字段address,顺序如下:

db.inventory.find( {
    producer: {
        company: 'ABC123',
        address: '123 Street'
    }
});
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16002659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档