【发布时间】: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