【问题标题】:Populating an Object with Information from a Child Object with Different Model (JS/Mongoose)用不同模型(JS/Mongoose)的子对象的信息填充对象
【发布时间】:2020-04-18 04:08:06
【问题描述】:

这就是我所拥有的。我创建了一个项目模型,它为一组成员引用了一个用户模型。

var ProjectSchema = new mongoose.Schema(
    {title: {
     type: String,
     required: true
    },

   members: [
       {user: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'users'
            }
       }],
});

用户架构(我有从这两个架构创建模型的代码)

const UserSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  }

});

在一个单独的文件中,我想导出找到的项目的 JSON 并将用户的信息包含在 members 数组中,但我不知道该怎么做。这是我现在的代码。

const project = await Project.findById(req.params.proj_id).populate(
      'members'
    );
res.json(project);

找到项目没有问题,但我能得到的关于成员的唯一信息是他们的 ID。我尝试使用 for 循环使用我可以从项目中获得的 id 分别从成员那里收集信息,但是代码变得混乱,我希望找到一种更简单的方法来做到这一点。

【问题讨论】:

    标签: javascript database mongoose mongoose-populate


    【解决方案1】:

    您可以使用 mongoose 填充查询来获取与项目关联的所有成员。它应该填充与项目关联的用户对象数组。你应该这样做:

    const project = await Project.findById(req.params.proj_id)
    await project.populate('members').execPopulate()
    console.log(project.members)
    

    Mongoose 文档供参考:Populate

    【讨论】:

      【解决方案2】:

      您可以将模型提供给您的猫鼬填充。

      const project = await Project.findById(req.params.proj_id)
        .populate({
            'members',
             model: UserModel
          })
        .exec() 
      res.json(project);
      

      请记住,您必须像创建 UserModel const UserModel = mongoose.model('User', userSchema);

      【讨论】:

        猜你喜欢
        • 2018-06-11
        • 2023-04-01
        • 2020-09-12
        • 1970-01-01
        • 2017-10-03
        • 2018-04-14
        • 2020-06-01
        • 2018-08-11
        • 2016-05-31
        相关资源
        最近更新 更多