聚合多个查找和管道 return 仅最后一个元素

Aggregate with multiple lookup and pipeline return only the last element

我尝试了下面的代码,它正在努力从其他集合中查找值。但为什么它只有 return 最后一个元素。

如果我省略展开函数,它 return 都是模型的结果,但第二次查找不会像第一次查找 return 数组那样工作。

我的 objective 是查找包含 templatefolders 集合中表示的模型 ID 的文件夹。

const result = await this.dashboardModel
      .aggregate([{ $match: filter }])
      .lookup({
        from: 'templatefolders',
        as: 'template',
        let: { id: '$_id' },
        pipeline: [
          {
            $match: {
              $expr: {
                $and: [
                  {
                    $eq: ['$dashboardId', '$$id'],
                  },
                  {
                    $eq: ['$deletedAt', null],
                  },
                ],
              },
            },
          },
          {
            $project: {
              _id: 1,
              folderId: 1,
            },
          },
        ],
      })
      .unwind('template')
      .lookup({
        from: 'folders',
        as: 'folder',
        let: { folderId: '$template.folderId' },
        pipeline: [
          {
            $match: {
              $expr: {
                $and: [
                  {
                    $eq: ['$_id', '$$folderId'],
                  },
                  {
                    $eq: ['$deletedAt', null],
                  },
                ],
              },
            },
          },
          {
            $project: {
              _id: 1,
              name: 1,
            },
          },
        ],
      })
      .unwind('folder')
      .exec();
    return result;

结果

{
  "data": [
    {
      ...(parent field)
      "template": {
        "_id": "60ab22b03b39e40012b7cc4a",
        "folderId": "60ab080b3b39e40012b7cc41"
      },
      "folder": {
        "_id": "60ab080b3b39e40012b7cc41",
        "name": "Folder 1"
      }
    }
  ],
  "meta": {},
  "success": true,
  "message": "Succesfully get list"
}

我是前端出身。我希望我的问题不是一个愚蠢的问题。

谢谢!

编辑:

dashboard: [{
  _id: dashboard1
}]

templatefolders: [{
  dashboardId: dashboard1,
  folderId: folder123
}]

folders: [{
  _id: folder123
}]

您可以使用$lookup加入collections

这是代码

db.dashboard.aggregate([
  {
    "$lookup": {
      "from": "templatefolders",
      "localField": "_id",
      "foreignField": "dashboardId",
      "as": "joinDashboard"
    }
  },
  {
    "$unwind": "$joinDashboard"
  },
  {
    "$lookup": {
      "from": "folders",
      "localField": "joinDashboard.folderId",
      "foreignField": "_id",
      "as": "joinDashboard.joinFolder"
    }
  },
  {
    "$group": {
      "_id": "$_id",
      "joinDashboard": {
        "$push": "$joinDashboard"
      }
    }
  }
])

工作Mongo playground