Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何将两个独立的Mongo聚合组合成一个聚合?_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb 如何将两个独立的Mongo聚合组合成一个聚合?

Mongodb 如何将两个独立的Mongo聚合组合成一个聚合?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有两个聚合查询,我想将它们合并成一个聚合查询。我想知道我怎样才能做到这一点 两个查询都在讨论一个名为Submission的集合,它主要是关于状态的。下面是两个聚合查询的 : 理想情况下,我希望得到以下结果: { "_id": null, "successBookingIds": [ "NW111" ], "errorBookingIds": [ "

我有两个聚合查询,我想将它们合并成一个聚合查询。我想知道我怎样才能做到这一点

两个查询都在讨论一个名为
Submission
的集合,它主要是关于
状态的。下面是两个聚合查询的
:

理想情况下,我希望得到以下结果:

{
    "_id": null,
    "successBookingIds": [
      "NW111"
    ],
    "errorBookingIds": [
      "NW115"
    ]
}

我如何以最好的方式实现这一点?考虑性能。

您可以使用stage实现此用例

db.collection.aggregate([
  {
    $match: {
      sent: false
    }
  },
  {
    $group: {
      _id: "$bookingId",
      status: {
        $addToSet: "$status"
      }
    }
  },
  {
    $facet: {
      success: [
        {
          $match: {
            status: {
              $nin: [
                "ERROR"
              ]
            }
          }
        },
        {
          $match: {
            status: {
              $in: [
                "SUCCESS"
              ]
            }
          }
        },
        {
          $project: {
            success: "$_id",
            _id: 0
          }
        }
      ],
      error: [
        {
          $match: {
            status: {
              $in: [
                "ERROR"
              ]
            }
          }
        },
        {
          $project: {
            error: "$_id",
            _id: 0
          }
        }
      ]
    }
  },
  {
    $project: {
      concat: {
        "$concatArrays": [
          "$error",
          "$success"
        ]
      }
    }
  },
  {
    $unwind: "$concat"
  },
  {
    $group: {
      _id: null,
      successBookingIds: {
        $push: "$concat.success"
      },
      errorBookingIds: {
        $push: "$concat.error"
      }
    }
  }
])