最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 7浏览 0评论

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组和来自聚合方面的两个类似数据的数组相加

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

评论列表 (0)

  1. 暂无评论