Mongodb通过几个值进行聚合,但只限制其中一个值

Mongodb通过几个值进行聚合,但只限制其中一个值,mongodb,aggregate,Mongodb,Aggregate,我有这个查询,它工作正常,但我必须为状态1添加限制结果。 如您所见,我带来了状态为1、2、3的项目,但我需要限制状态为1的项目,我有大约10万个状态为1的项目 我想我应该在$project之前进行筛选,但我想最好在$lookup之前限制它,不幸的是,我以前不知道如何限制它 aggregate([ { $match: { status: {$in: [1,2,3] } }, { "$lookup": { "from": "p

我有这个查询,它工作正常,但我必须为状态1添加限制结果。 如您所见,我带来了状态为1、2、3的项目,但我需要限制状态为1的项目,我有大约10万个状态为1的项目

我想我应该在$project之前进行筛选,但我想最好在$lookup之前限制它,不幸的是,我以前不知道如何限制它

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