从聚合方法 Mongoose 返回单个对象

问题描述

我有一个动态模型“对话”模型,其中称为“讲座”的字段有时可用有时不可用,并且在不同的 nodejs 服务器上定义了 Lecture 模型。我也想在对话框中填充讲座的结果。所以我尝试使用 populate 但它给出了一个 Schema not register 错误。所以我试图使用 $lookup 来连接来自不同集合的数据。但是,Aggregate 方法返回一个数组,我需要一个对象。我曾尝试使用 arr[0] 使用索引零进行访问。但是我在 Dialog 模型上定义了一个方法。当我尝试访问它时会引发错误

  const resp = await DialogModel.aggregate([
        {
            $match: {
                $and: query
            }
        },{
            $lookup: {
                from: "lectures",localField: "lecture",foreignField: "_id",as: "lectureDetail"
            }
        },{
            $unwind: {
                path: "$lectureDetail",preserveNullAndEmptyArrays: true
            }
        }
    ]);

这是最新的:

[
  {
    _id: 60ab86e1671c602015741955,lecture: 607d4d3de9b8be1f29e56e94,lectureDetail: {
      _id: 607d4d3de9b8be1f29e56e94,course: 6076ba3a01060327b3231a3c,owner: 607434cd63b75949f61cc065,name: 'Lecture 11',startDate: 2021-05-24T07:00:00.000Z,endDate: 2021-05-24T08:00:00.000Z
    }
  }
]

这是预期的输出

{
  _id: 60ab86e1671c602015741955,lectureDetail: {
    _id: 607d4d3de9b8be1f29e56e94,endDate: 2021-05-24T08:00:00.000Z
  }
}

如果我尝试使用索引获取访问权限,并在其上调用方法方法通过错误定义在我的模型上不是函数

这是我的查询。请指导我如何解决这个问题。

解决方法

聚合方法总是以数组的形式返回结果,而不是单个对象。

您可以通过 ==> resp[0]

访问您的第一个对象