如何根据MongoDB中数组中的子文档过滤父项?

时间:2015-01-28 06:52:16

标签: mongodb

MongoDb文档有以下模式。我想只显示带有标记的项目"显示"设为true。

{
  id: 123,
  properties : [ 
     {name : "Name", value: "Value"},
     {name : "Description", value: "A description of the item"},
     {name : "Display", value: true}
 ]

}

我无法弄清楚如何在MongoDB中执行此操作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

要匹配完整的数组项,您需要使用$elemMatch运算符。

db.col.find({properties : {$elemMatch : {name : "Display", value : true}}});

这样,只会返回一个文档项目同时匹配所有条件的文档。

查询

db.col.find({"properties.name" : "Display", "properties.value" : true});

将匹配数组项中的任何组合。

例如,在这种情况下也会返回以下文档:

{
    id: 123,
    properties : [
        {name : "Name", value: "Value"},
        {name : "Description", value: "A description of the item"},
        {name : "Display", value: false},
        {name : "AnotherOne", value: true}
    ]
}