【问题标题】:How to match and retrieve specific Sub-document value from Mongo如何从 Mongo 匹配和检索特定的子文档值
【发布时间】:2018-02-22 15:33:04
【问题描述】:

如何仅从该集合中搜索和检索“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)
                }
 }

这是我期望的输出。谁能帮我写这个聚合?啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

【问题讨论】:

    标签: arrays mongodb mongodb-query aggregation-framework


    【解决方案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'
        }
    }}
    ])
    

    【讨论】:

      【解决方案2】:

      使用 $elemMAtch 在数组中搜索。

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

      【讨论】:

      • 但它甚至会返回所有不匹配的子文档。还有其他过滤方式吗?
      • 为此,您必须使用聚合。
      猜你喜欢
      • 2022-10-12
      • 2016-04-15
      • 1970-01-01
      • 2011-09-26
      • 2018-06-21
      • 1970-01-01
      • 2016-03-21
      • 2014-08-24
      • 2022-01-09
      相关资源
      最近更新 更多