用猫鼬填充嵌套字段

时间:2019-03-09 01:26:45

标签: node.js mongodb express mongoose mongoose-populate

我有一个使用Express,MongoDB和Mongoose的应用程序。

我有三个模型-UserClinicParticipant

每个Clinic都有与该特定诊所相关的User列表。 制作新的Participant时,它们将与Clinic关联。

例如:

Clinic.js

const mongoose = require('mongoose');
const ClinicSchema = new mongoose.Schema({
  members: [
    {
      user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'users',
        required: true
      },
      role: {
        type: String,
        required: true
      }
    }
  ],
  name: {
    type: String,
    required: true
  }
});
module.exports = Clinic = mongoose.model('clinics', ClinicSchema);

Participant.js

const mongoose = require('mongoose');
const ParticipantSchema = new mongoose.Schema({
  clinic: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'clinics'
  },
  name: {
    type: String,
    required: true
  }
});
module.exports = Participant= mongoose.model('participants', ParticipantSchema);

在我的一条路线中,我要返回一个特定的参与者,并且我想在该参与者上填充整个“诊所”字段-包括“成员”数组。至少,我只需要members数组中每个项目的用户ID。

我所拥有的代码正在按预期填充'clinic'字段,但是'members'数组将以members: [ [Object] ]的形式返回

routes.js

router.get(
  '/api/participants/:participantID',
  passport.authenticate('jwt',{session: false}),
  (req, res) => {
    Participant.findById(req.params.participantID)
      .populate({path: 'clinic', select: 'members'})
      .then(patient => {
        console.log(patient)
      });
  }
);

我需要在上述路由中进行哪些修改,以使猫鼬填充嵌套的members数组?

猫鼬似乎不允许使用点语法的path变量,例如.populate({path: 'clinic.members'})不起作用,并且以菊花链方式将.populate({path: 'members'})链接到初始.populate()上也可以。


编辑

根据this question的答案提供者,我尝试了以下操作:

router.get(
  '/api/participants/:participantID',
  passport.authenticate('jwt',{session: false}),
  (req, res) => {
    Participant.findById(req.params.participantID)
      .populate({
        path: 'clinic',
        select: 'members'
        populate: {path: 'members'}  // added this code
      })
      .then(patient => {
        console.log(patient)
      });
  }
);

但是,当数据库中记录了3个条目时,这将返回一个空数组。

如果我将model: 'User'包含在链接问题答案中建议的第二个填充数组中,则会抛出MissingSchemaError: Schema hasn't been registered for model "User".

0 个答案:

没有答案