[英]Mongoose Populate not working in array of sub-document with “path” option
[英]Mongoose sub-document deep populate
我正在嘗試使用Nodejs和貓鼬學習Mongdb。 我無法成功“填充”我的貓鼬查詢。
這是我的數據庫:
companies: [{
name:"test"
users:[{
name:"user1",
role: { type: Schema.Types.ObjectId, ref: 'Role' } //5a32a0b0c592bb82f67602fa
}]
}],
roles:[{_id:"5a32a0b0c592bb82f67602fa",name:"ADMIN",label:"Administrator"}]
我想獲取用戶“ user1”及其公司“ test”的角色“ ADMIN”。這是我的查詢:
return this.companyModel.findOne({
name: companyName,
users: { $elemMatch: user }
}).then((res: ICompany) => {
if (!res) {
throw new ResourceNotFound('User Not Found');
}
try {
return res.users[0];
}
catch (e) { throw new ServerError('Server error'); }
});
這是查詢的輸出:
{
"_id": "5a32b2fed9d8579b906fb95d",
"role": "5a32a0b0c592bb82f67602fa", <-- I need to populate this field
"name": "user1"
}
像這樣:
{
"_id": "5a32b2fed9d8579b906fb95d",
"role": {_id:"5a32a0b0c592bb82f67602fa",name:"ADMIN",label:"Administrator"},
"name": "user1"
}
如何填充“角色”字段? 我嘗試了幾次“填充”,但沒有成功!
編輯
我發現以下解決方案:
return this.companyModel.findOne({
name: companyName,
users: { $elemMatch: user }
}).then((res: ICompany) => {
if (!res) {
throw new ResourceNotFound('User Not Found');
}
try {
return this.roleModel.populate(res.users[0], { "path": "role" }).then(fullUser => {
return fullUser;
})
}
catch (e) { throw new ServerError('Server error'); }
});
這是實現我需要的更好的方法還是最優雅的方法?
您是否了解過$ lookup 。 這可以幫助您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.