如何匹配和检索Mongo的特定子文档值

时间:2018-02-22 15:33:04

标签: arrays mongodb mongodb-query aggregation-framework

如何仅搜索和检索" Stats.item.id"来自这个大于零的集合" Stats.item.p"值。我也在解开这个集合时面临问题。

{ 
 "_id" : "8643", 
"Stats" : [  
    {
        "date" : ISODate("2014-02-01"), 
        "Stats" : {
            "item" : [ 
                {
                    "id" : "4356"
                }, 
                {
                    "id" : "9963", 
                    "p" : NumberInt(1)
                }
            ]
        }
    }
]

}

{ 
 "_id" : "8643",
 {
    "date" : ISODate("2014-02-01"), 
    "Stats" : {
        "item" : [
         {
                    "id" : "9963", 
                    "p" : NumberInt(1)
                }
 }

这是我期望的输出。任何人都可以帮我写这个聚合吗? oooooooooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooo oooooooooooooooooooo oooooooooooo oooooooo

2 个答案:

答案 0 :(得分:1)

希望这个聚合查询能够正常工作

db.collection.aggregate([
{$unwind:'$Stats'},
{$unwind:'$Stats.Stats'},
{$unwind:'$Stats.Stats.item'},
{$match:{
    'Stats.Stats.item.p':{$gt:0}
}},
{$group:{
    _id:{
        date:'$Stats.date'
    },
    item:{$push:'$Stats.Stats.item'},
    _ids:'$_id'
}},
{$group:{
    _id:{_ids:'$_ids',
    date:'$_id.date'},
    Stats:{$push:{
        item:'$item'
        }},
}},
{$project:{
    _id:'$_id._ids',
    Stats:{
        date:'$_id.date'
        Stats:'$Stats'
    }
}}
])

答案 1 :(得分:0)

使用 $ elemMAtch 搜索数组。

db.getCollection('CollectionName').find({
    "Stats": {
        "$elemMatch": {
            "Stats.item": {
                "$elemMatch": {
                    "p": 1
                }
            }
        }
    }
})