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"
}
}
}
])