gpt4 book ai didi

javascript - 如何在 Mongoose 中填充嵌套实体?

转载 作者:可可西里 更新时间:2023-11-01 10:46:15 26 4
gpt4 key购买 nike

我有这样的模型:

const UserSchema = new mongoose.Schema({
name: String,
workspaces: [
{
workspace: {
type: mongoose.Schema.ObjectId,
},
owner: Boolean
}
]
});

const WorkspaceSchema = new mongoose.Schema({
title: String,
description: String
});

我想像这样填充用户记录:

{
name: "John",
workspaces: [{
workspace: {
title: "First space",
description: "About space#1"
},
owner: true
}, {
workspace: {
title: "Second space",
description: "About space#2"
},
owner: false
}]
}

我尝试通过 populate 方法做到这一点:

const user = await User
.findOne(query)
.populate({
path: 'workspaces',
populate: {
path: 'workspace',
model: 'Workspace'
}
});

这是不正确的。我搜索了这样的案例,但没有找到类似的东西。所有其他示例都不包含像我的 bool “所有者”这样的属性。

最佳答案

我建议您在用户架构声明中添加对工作空间模型的引用:

 workspace: {
type: mongoose.Schema.ObjectId,
ref: "Workspace"
}

此外,您可能搞砸了 populate 方法,因为 workspaces 数组本身不包含对外部对象的引用。您可能应该像这样使用此方法:

const user = await User
.findOne(query)
.populate("workspaces.workspace");

或者,如果您需要任何其他选项,而不是路径,则使用选项对象:

const user = await User
.findOne(query)
.populate({
path: "workspaces.workspace", ...
});

关于javascript - 如何在 Mongoose 中填充嵌套实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com