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组和来自聚合方面的两个类似数据的数组相加的主要内容,如果未能解决你的问题,请参考以下文章