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

标签 javascript node.js mongodb mongoose mongoose-populate

我有这样的模型:

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/

相关文章:

javascript - 用Javascript替换从JSON获取的数组数据特殊字符

javascript - ajax调用后表消失了

node.js - 通过 @IsInt() 验证 application/x-www-form-urlencoded 请求类型

javascript - 从 Java 添加数据到 Meteor

javascript - Rangeslider.js |未捕获的类型错误 : Cannot read property '0' of undefined

javascript - 计算 Dynamics crm 中查找字段的长度

javascript - Node.js 中的缓冲区和 URL 编码

node.js - 将模板渲染到expressjs中的变量

mongodb - mongodb 适合像 stackoverflow 这样的网站吗?

c++ - 使用事务 : Total size of all transaction operations must be less than 16793600. 的 MongoDB 错误实际大小为 16793810:一般服务器错误