4

我有两个模型对象。医生和医院。模型定义如下所示:

module.exports = {

  schema: true,

  autoUpdatedAt: true,
  autoCreatedAt: true,
  attributes: {
    name: {
      type: 'string',
      required: true,
      unique: true
    },
    hospitals: {
      collection: 'hospital',
      via: 'doctors',
      dominant: true,
    },
  }
};

module.exports = {
  schema: true,
  autoUpdatedAt: true,
  autoCreatedAt: true,
  attributes: {
    name: {
      type: 'string',
      required: true,
      unique: true
    },
    doctors: {
      collection: 'doctor',
      via: 'hospitals',
    },
  }
};

如何查询映射到特定医院的医生?我阅读了几篇关于through关键字的帖子,但我无法将记录保存到直通/连接表中。好像如果我可以查询自动连接表,我可以让它工作,但我很好奇是否有一种“官方”的方式来完成这种类型的查询。

我当前的查询如下所示:Doctor.find().where({'hospitals': ['548303dcf49435ec4a01f2a2','548303cbf49435ec4a01f2a0']}).populate('hospitals').exec(function (err, doctors) { ... });

底层数据库是 mongo,如果这很重要的话。

4

1 回答 1

1

我确实作弊了一点,但事情似乎奏效了。也就是说,如果有更好的方法来完成这种类型的查询,我很感兴趣。

我创建了一个映射到自动创建的连接表的模型对象。所以在这种情况下,我的附加模型对象如下所示:

module.exports = {

  schema: true,

  autoUpdatedAt: true,
  autoCreatedAt: true,
  tableName: 'doctor_hospitals__hospital_doctors',
  attributes: {

    doctor: {
      model: 'doctor',
      columnName: 'doctor_hospitals'
    },

    hospital: {
      model: 'hospital',
      columnName: 'hospital_doctors'
    }
  }
};

现在,我直接查询连接表并将结果用于子查询:

DoctorHospital.find().where({'hospital': ['548303dcf49435ec4a01f2a2','548303cbf49435ec4a01f2a0']}).exec(function(err, doctorHospitals) {
  if(err) return next(err);

  Doctor.find().where({'id': _.pluck(doctorHospitals, 'doctor')}).populate('hospitals').exec(function (err, doctors){
    if(err) return next(err);

    return res.view({
      doctors: doctors
    });
  });
});
于 2014-12-07T16:40:08.087 回答