【问题标题】:Return a single object from Aggregate Method Mongoose从 Aggregate Method Mongoose 返回单个对象
【发布时间】:2021-08-13 07:10:09
【问题描述】:

我有一个动态模型“对话”模型,其中一个名为演讲的字段有时可用,有时不可用,并且演讲模型是在不同的 nodejs 服务器上定义的。我也想在对话框中填充讲座的结果。所以我尝试使用填充,但它给出了一个 Schema not register 错误。所以我正在尝试使用 $lookup 来加入来自不同集合的数据。但是,聚合方法返回一个数组,我需要一个对象。我尝试使用索引零使用 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,
  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
  }
}

如果我尝试使用索引获取访问权限,并在其上调用方法。通过 is not a function 错误在我的模型上定义的方法。

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

【问题讨论】:

  • 可以显示聚合结果吗?和预期的输出?
  • 我已经编辑了问题并添加了预期输出和当前输出。
  • lectureDetail是一个对象,你可以直接访问它..当你给我们看的时候,为了更好的视力,请去掉不必要的字段
  • 我说的是作为一个整体的返回列表,我希望它是一个对象。
  • 获取第一个对象时遇到什么问题?

标签: node.js mongodb mongoose-schema mongoose-populate


【解决方案1】:

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

您可以通过 ==> resp[0] 访问您的第一个对象

【讨论】:

  • 是的,我试过了。但是在我的 Dialog 对象上,我有一个方法。当我尝试在此对象上调用它时,它会引发错误。错误是“不是函数”
猜你喜欢
  • 2015-04-14
  • 2014-03-24
  • 1970-01-01
  • 2018-04-03
  • 2019-02-19
  • 1970-01-01
  • 2023-03-25
  • 2018-08-07
  • 2020-11-25
相关资源
最近更新 更多