Mongodb组和来自聚合方面的两个类似数据的数组相加

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb组和来自聚合方面的两个类似数据的数组相加相关的知识,希望对你有一定的参考价值。

我正在运行针对不同级别的社交数据的查询,并使用一些相当大的聚合管道,然后在$ 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
    ]
}]

我有一个查询,将各个响应分组以使它们达到此级别,但缺少允许我在两个数组之间合并的内容。我已经尝试展开第一个和第二个数组但是却找不到跨两个数组组合数据的解决方案。

任何帮助,提示或知识非常感谢。

答案

使用$concatArrays合并来自$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
          ]
        }
      }
    }
  }
]

以上是关于Mongodb组和来自聚合方面的两个类似数据的数组相加的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?

MongoDB聚合组和计数字符串

如何使用聚合 MongoDB 查找具有两列的不同字段

两个集合的聚合数组 mongodb

MongoDB 聚合与嵌套的对象属性数组与日期

mongodb Aggregation聚合操作之$facet