Mongodb通过几个值进行聚合,但只限制其中一个值
我有这个查询,它工作正常,但我必须为状态1添加限制结果。 如您所见,我带来了状态为1、2、3的项目,但我需要限制状态为1的项目,我有大约10万个状态为1的项目 我想我应该在$project之前进行筛选,但我想最好在$lookup之前限制它,不幸的是,我以前不知道如何限制它Mongodb通过几个值进行聚合,但只限制其中一个值,mongodb,aggregate,Mongodb,Aggregate,我有这个查询,它工作正常,但我必须为状态1添加限制结果。 如您所见,我带来了状态为1、2、3的项目,但我需要限制状态为1的项目,我有大约10万个状态为1的项目 我想我应该在$project之前进行筛选,但我想最好在$lookup之前限制它,不幸的是,我以前不知道如何限制它 aggregate([ { $match: { status: {$in: [1,2,3] } }, { "$lookup": { "from": "p
aggregate([
{ $match: { status: {$in: [1,2,3] } },
{
"$lookup": {
"from": "participants",
"localField": "_id",
"foreignField": "participantId",
"as": "participants"
}
},
{"$project": {
"_id": 1,
"status": 1,
"title": 1,
"expiresAt": 1,
"duration:": 1,
"cost":1,
"seat": 1,
"participants.username": 1
}}
])我给你一个主意
db.collection.aggregate([
{
$group: {//Group each status
"_id": "$a",
"data": {//Store that grouped doc
$push: "$$ROOT"
},
"elem": {//Store the status outside
$first: "$a"
}
}
},
{
"$project": {//While projecting
"_id": "$_id",
"data": {
"$cond": [//have a condition
{
"$eq": [//If status is 1
"$elem",
1
]
},
{
"$slice": [//Slice the required element
"$data",
1
]
},
"$data" //For other status, get every document
]
}
}
}
])