簡體   English   中英

如何在貓鼬中填充嵌套實體?

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

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