【问题标题】:Merge Multiple Document from same collection MongoDB合并来自同一集合MongoDB的多个文档
【发布时间】:2017-10-17 18:03:30
【问题描述】:

我有一个这样的 JSON 数据,我想以这样的方式对这些数据应用聚合,以便我应该从数据中分组:

{
  "series": [
    {
     "id": "1",
      "element": "111",
      "data": [
        {
          "timeFrame": {
            "from": "2016-01-01T00:00:00Z",
            "to": "2016-01-31T23:59:59Z"
          },
          "value": 1
        },
        {
          "timeFrame": {
            "from": "2016-02-01T00:00:00Z",
            "to": "2016-02-29T23:59:59Z"
          },
          "value": 2
        }
      ]
    }
  ]
}

我已经通过上述聚合实现了这一点:

db.getCollection('col1').aggregate([
{$unwind: "$data"},
{$group :{
    element: {$first:"$relatedElement"},
    _id : {
        day : {$dayOfMonth: "$values.timeFrame.from"},
        month:{$month: "$values.timeFrame.from"},
        year:{$year: "$values.timeFrame.from"}
    },
    fromDate : { $first : "$values.timeFrame.from" },
    total : {$sum : "$values.value"},
    count : {$sum : 1},
 }
},
{ 
  $project: {  
      _id : 0,
      element:1,
      fromDate  : '$fromDate', 
      avgValue : { $divide: [ "$total", "$count" ] }
    }
}]) 

输出:

{
    "id" : "1",
    "element" : "3",
    "fromDate" : ISODate("2017-05-01T00:00:00.000Z"),
    "avgValue" : 0.0378787878787879
}

{
    "id" : "1",
    "element" : "3",
    "fromDate" : ISODate("2017-04-30T22:00:00.000Z"),
    "avgValue" : 0.416666666666667
}

但是,我得到了两个文档,我想将其合并为一个文档,例如:

{
    "id" : "1",
    "element" : "3",
    "average" : [
    {
    "fromDate" : ISODate("2017-05-01T00:00:00.000Z"),
    "avgValue" : 0.0378787878787879
    },
    {
    "fromDate" : ISODate("2017-04-30T22:00:00.000Z"),
    "avgValue" : 0.416666666666667
    }
    ]
}

谁能帮帮我。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    在聚合管道的末尾添加以下 $group 以将当前输出文档合并到单个文档中 -

    {$group:{
        _id:"$_id",
        element: {$first: "$element"},
        average:{$push:{
          "fromDate": "$fromDate",
          "avgValue": "$avgValue"
        }}
    }}
    

    【讨论】:

      猜你喜欢
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2021-10-30
      • 2011-08-06
      • 2017-07-13
      相关资源
      最近更新 更多