Mongo:如何检索匹配某些属性的ONLY子目录

时间:2016-01-10 19:46:10

标签: mongodb mongoose mongodb-query

例如,有一个名为test的集合,其中包含以下文档:

{
    "_id" : ObjectId("5692ac4562c824cc5167379f"),
    "list" : [ 
        {
            "name" : "elem1",
            "type" : 1
        }, 
        {
            "name" : "elem2",
            "type" : 2
        }, 
        {
            "name" : "elem3",
            "type" : 1
        }, 
        {
            "name" : "elem4",
            "type" : 3
        }, 
        {
            "name" : "elem4",
            "type" : 2
        }
    ]
}

我想说我想在list内检索匹配的那些子文档的列表:

  • type = 2

我已尝试过以下查询

db.getCollection('test').find({
    '_id': ObjectId("5692ac4562c824cc5167379f"),
    'list.type': 1
})

但是我得到的结果包含 list内的每个子文档,我猜这是因为在list内至少有一个文档的类型< em>等于 1。

而不是那个,我有兴趣获得的结果是匹配list 'list.type': 1内的每个子文档:

{
    "_id" : ObjectId("5692ac4562c824cc5167379f"),
    "list" : [ 
        {
            "name" : "elem1",
            "type" : 1
        }, 
        {
            "name" : "elem3",
            "type" : 1
        }
    ]
}

...所以$$elemMatch不是我真正想要的,因为它们只返回第一个匹配元素。

任何人都知道如何实现我的目标?

1 个答案:

答案 0 :(得分:0)

db.myCol.aggregate([ 
                    { $unwind: "$list" }, 
                    { $match: { "list.type":1 } }, 
                    { $group: { "_id":"$_id", list: {$push:"$list"}} }
])