仅提取查找的 return (mongoose)

Excract only the lookup's return (mongoose)

所以我的 mongodb 里有两个 collections。

   // Collection 1, named Event
   {
        "_id": "625335297fcc20782bcdf085",
        "title": "Evento 1",
        "description": "lorem ipsum evento 1",
        "img": "nao implementado",
        "value": 0,
        "remainingVacancies": 14,
        "isSingleDay": false,
        "dateByDay": [
            {
                "initialDate": "2022-04-10T21:17:09.785Z",
                "finalDate": "2022-04-10T21:17:09.785Z",
                "_id": "62534955171ecadae7ff6cd4"
            },
            {
                "initialDate": "2022-04-10T21:17:09.785Z",
                "finalDate": "2022-04-10T21:17:09.786Z",
                "_id": "62534955171ecadae7ff6cd5"
            }
        ],
        "__v": 0
    }

   // Collection 2, named Presentation
   {
        "_id": "62549d4d3b41827fe7593332",
        "title": "Apresentação 1",
        "description": "lorem ipsum 11 testee",
        "img": "nao implementado",
        "value": 0,
        "remainingVacancies": 14,
        "isSingleDay": true,
        "dateByDay": [
            {
                "initialDate": "2022-04-11T21:27:41.823Z",
                "finalDate": "2022-04-11T21:27:41.823Z",
                "_id": "62549d4d3b41827fe7593333"
            }
        ],
        "eventId": "625335297fcc20782bcdf085",
        "__v": 0
    }

我试过像这样在事件中使用查找聚合:

Event.aggregate([
    {
      $match: {
        _id: mongoose.Types.ObjectId(_id)
      },
    },
    {
      $lookup: {
        from: 'presentations',
        localField: '_id',
        foreignField: 'eventId',
        as: 'registeredPresentations'
      },
    },
    {
      $unwind: "$registeredPresentations"
    },
    {
      $project: {
        _id: 0,
        registeredPresentations: 1
      }
    },
  ]);

它return是这个输出

   {
        "registeredPresentations": {
            "_id": "6254900aa5b5977e99498ee0",
            "title": "Apresentação 1",
            "description": "lorem ipsum 22 testee",
            "img": "nao implementado",
            "value": 0,
            "remainingVacancies": 14,
            "isSingleDay": true,
            "dateByDay": [
                {
                    "initialDate": "2022-04-11T20:31:06.324Z",
                    "finalDate": "2022-04-11T20:31:06.324Z",
                    "_id": "6254900aa5b5977e99498ee1"
                }
            ],
            "eventId": "625335297fcc20782bcdf085",
            "__v": 0
        }
    },

但是因为我在一个事件中有多个相关的演示文稿,所以我不希望值 returns 作为“registeredPresentations”的 object。我想要的是使用 lookup 在输出中提取没有“registeredPresentations”的 return,就像这样:

   {
        "_id": "62549d4d3b41827fe7593332",
        "title": "Apresentação 1",
        "description": "lorem ipsum 11 testee",
        "img": "nao implementado",
        "value": 0,
        "remainingVacancies": 14,
        "isSingleDay": true,
        "dateByDay": [
            {
                "initialDate": "2022-04-11T21:27:41.823Z",
                "finalDate": "2022-04-11T21:27:41.823Z",
                "_id": "62549d4d3b41827fe7593333"
            }
        ],
        "eventId": "625335297fcc20782bcdf085",
        "__v": 0
    },

有没有办法在输出中没有“registeredPresentations”的情况下提取这个值?

使用$replaceWith

db.orders.aggregate([
  {
    $match: {
      _id: "625335297fcc20782bcdf085"
    }
  },
  {
    $lookup: {
      from: "presentations",
      localField: "_id",
      foreignField: "eventId",
      as: "registeredPresentations"
    }
  },
  {
    $unwind: "$registeredPresentations"
  },
  {
    $project: {
      _id: 0,
      registeredPresentations: 1
    }
  },
  {
    $replaceWith: "$registeredPresentations"
  }
])

mongoplayground