首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mongoose中正确使用populate

如何在mongoose中正确使用populate
EN

Stack Overflow用户
提问于 2021-07-20 15:36:21
回答 2查看 31关注 0票数 0

我正在尝试使用mongoose在NodeJS中填充一个引用字段,用于mongodb交互。我有以下代码:

内务管理模型

代码语言:javascript
复制
...
user: {
    type: mongoose.Schema.Types.ObjectId
    required: true
    ref: "User"
}
...

用户模型

代码语言:javascript
复制
...
userSchema.virtual("housekeepings", {
    ref: "Housekeeping",
    localField: "_id"
    foreignField: "user"
}
...

内务路由器

代码语言:javascript
复制
...
const housekeepings = await Housekeeping.find({day:day, house: house})
                                .populate("user")
                                .exec(function (err, housekeeping) {
                                    if(err) return
                                    console.log("Username is: " + housekeeping.user.name
                                    )
                                })
...

这段代码导致不能读取未定义的属性"name“(我在数据库中有应该加载的文档)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-22 16:19:48

因此,很明显,问题是我在没有更新数据库和POST方法的情况下,将“内务模型”中的字段名称从"owner“更改为"user”。

票数 0
EN

Stack Overflow用户

发布于 2021-07-20 18:23:37

因为您使用的是Model.find(),所以您的housekeeping将是一个数组。这就是为什么housekeeping.user是未定义的。如果你想找到一个文档,那就改用Model.findOne()。此外,您也不需要在await中使用.exec()。只要:

代码语言:javascript
复制
const housekeepings = await Housekeeping.find({day:day, house: house}).populate("user");
console.log(housekeepings[0].user.name)

或者:

代码语言:javascript
复制
const housekeeping = await Housekeeping.findOne({day:day, house: house}).populate("user");
console.log(housekeeping.user.name)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68451179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档