[英]How to populate document nested in array of objects in Mongoose?
[英]How to populate nested entity in Mongoose?
我有這樣的模型:
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
}]
}
我試圖通過填充方法做到這一點:
const user = await User
.findOne(query)
.populate({
path: 'workspaces',
populate: {
path: 'workspace',
model: 'Workspace'
}
});
這是不正確的。 我搜索了這種情況,但沒有發現任何類似的情況。 其他所有示例均不包含我的布爾“所有者”之類的屬性。
使用人口稠密的
安裝:
npm i mongoose-deep-populate
用法:
var deepPopulate = require('mongoose-deep-populate')(mongoose);
User.deepPopulate(users, 'workspaces.workspace')
.then(function(err, data) {
console.log(data);
});
了解更多: https : //www.npmjs.com/package/mongoose-deep-populate
希望這可以解決您的查詢。
我建議您在用戶架構聲明中添加對工作區模型的引用:
workspace: {
type: mongoose.Schema.ObjectId,
ref: "Workspace"
}
另外,您可能搞砸了populate方法,因為workspaces
數組不包含對外部對象本身的引用。 您可能應該使用這種方法:
const user = await User
.findOne(query)
.populate("workspaces.workspace");
或者,如果您需要除路徑以外的任何其他選項,則與options對象一起使用:
const user = await User
.findOne(query)
.populate({
path: "workspaces.workspace", ...
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.