Arrays Mongodb对来自聚合方面的两个相似数据数组进行分组和求和

Arrays Mongodb对来自聚合方面的两个相似数据数组进行分组和求和,arrays,node.js,mongodb,mongoose,mongodb-query,Arrays,Node.js,Mongodb,Mongoose,Mongodb Query,我正在运行针对不同级别的社会数据的查询,并且已经使用了一些相当大的聚合管道,然后在$facet中运行。 $facet部分的结果显示了两个数组,然后我想合并它们。例如 { "first": [ { "_id": { "name": "one", "_id": "1" }, "date": [ "2017-09-07T00:00:00.000Z" ],

我正在运行针对不同级别的社会数据的查询,并且已经使用了一些相当大的聚合管道,然后在$facet中运行。 $facet部分的结果显示了两个数组,然后我想合并它们。例如

{
"first": [
    {
        "_id": {
            "name": "one",
            "_id": "1"
        },
        "date": [
            "2017-09-07T00:00:00.000Z"
        ],
        "data": [
            1000
        ]
    },
    {
        "_id": {
            "name": "two",
            "_id": "2"
        },
        "date": [
            "2017-09-07T00:00:00.000Z"
        ],
        "data": [
            2000
        ]
    }
],
"second": [
    {
        "_id": {
            "name": "1",
            "_id": "one"
        },
        "date": [
            "2017-09-07T00:00:00.000Z"
        ],
        "data": [
            1000
        ]
    },
    {
        "_id": {
            "name": "two",
            "_id": "2"
        },
        "date": [
            "2017-09-07T00:00:00.000Z"
        ],
        "data": [
            2000
        ]
    }
]
}
我想把这些结果组合在一起,把总数加起来

[ {
    "_id": {
        "name": "1",
        "_id": "one"
    },
    "date": [
        "2017-09-07T00:00:00.000Z"
    ],
    "data": [
        2000
    ]
},{
    "_id": {
        "name": "2",
        "_id": "two"
    },
    "date": [
        "2017-09-07T00:00:00.000Z"
    ],
    "data": [
        4000
    ]
}]
我有一个查询,它将单个响应分组,以使它们达到此级别,但缺少允许我跨两个数组合并的内容。我曾尝试过展开第一个和第二个阵列,但未能找到跨两个阵列组合数据的解决方案


非常感谢您的帮助、提示或知识。

使用
$concatarray
$facets
输出中合并数组,然后使用
$group
$arrayElemAt
$first
$sum
累加器选择第一个元素

[
  {
    "$project": {
      "combine": {
        "$concatArrays": [
          "$first",
          "$second"
        ]
      }
    }
  },
  {
    "$unwind": "$combine"
  },
  {
    "$group": {
      "_id": "$combine._id",
      "date": {
        "$first": {
          "$arrayElemAt": [
            "$combine.date",
            0
          ]
        }
      },
      "data": {
        "$sum": {
          "$arrayElemAt": [
            "$combine.data",
            0
          ]
        }
      }
    }
  }
]

我曾尝试将一个数组展开,并将其分组,然后展开另一个数组,这是一个相当标准的解决方案,但由于我尝试配对的数据跨两个数组,这实际上无助于分组。我解开了两个数组,这会造成一系列重复,但这可能是唯一的选择,因为我无法在“第一”和“第二”数组上运行组,需要首先拆分数组。一旦拆分了数组,我仍然需要删除包装对象,因为它会模糊到id的路径等。例如:第一:{u id,date,data},第二:{u id,date,data}可以说,第一个和第二个标志是“挡道”。退绕后的分组阶段是我被耽搁的地方,我可以写-$group:{u id:{name:'$first.\u id.brand',\u id:'$first.\u id.\u id',},日期:{$push:'$first.\u id.date'}但是显然,这也不会合并第二个数据库中的数据。您可以尝试
db.collection\u name.aggregate([{“$project”:{“combine”:{$concatarray:[“$first”,“$second”]}},{“$undund”:“$combine”},{“$group”:{“$combine.\u id”,“date”:{“$first”:{$arrayElemAt[“$combine.date 0]},{“$sum”:{$arrayElemAt。如果添加当前聚合查询以避免值首先以数组形式结束,则可以更好地回答此问题。@Veeram您建议的数组concat正符合我的需要。如果你想把它变成一个答案,我会投票表决。我认为您可以在聚合链上进一步调整查询,这可能是对的,但目前它是用一个方面包装的29个阶段管道,这个方面生成两个数组。