簡體   English   中英

貓鼬子文檔深度填充

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM