【问题标题】:Trying to associate two children collections to a parent collection using populate尝试使用填充将两个子集合关联到父集合
【发布时间】:2016-05-02 11:41:26
【问题描述】:

'我试图在医生集合中包含一组患者对象 ID 和一组数据(有关医生的信息)对象 ID。这是代码的开头,然后我迷路了。我想我想使用类似Doctor.find().populate('patients data') 的东西。那么如果有人能告诉我如何访问这些信息,那就太好了。

var express = require("express");
var app = express();
var mongoose = require("mongoose");

mongoose.connect("mongodb://localhost/population")

        var doctorSchema = new mongoose.Schema({
            name : String,
            patients : [{type : mongoose.Schema.Types.ObjectId, ref : "Patient"}],
            data : [{type : mongoose.Schema.Types.ObjectId, ref : "Data"}]
        })

        var patientSchema = new mongoose.Schema({
            name : String
        })
        var dataSchema = new mongoose.Schema({
            income : String
        })

        var Doctor = mongoose.model("Doctor",doctorSchema );
        var Patient = mongoose.model("Patient", patientSchema);
        var Data = mongoose.model("Data", dataSchema);

        var doc1 = new Doctor({"name" : "doc1"})
        doc1.save(doc1, function(err, doc){
            if(err){ 
                console.log(err)
            }else{
                console.log("saved")
            }

        })



app.listen(3000, function(){
    console.log("listening on 3000");
})

【问题讨论】:

    标签: javascript mongodb mongoose mongoose-populate database


    【解决方案1】:

    要访问信息,app 应该能够接收请求;需要在 app 对象上定义“get”方法:

    app.get('/:id', function(req, res) {
      var doctorID = req.params.id;
    
      Doctor
        .findOne({_id: doctorID})
        .populate('patients data')
        .exec(function(err, doctor) {
          if (err) throw err;
          res.send(doctor);
        });
    });
    

    【讨论】:

    • populate 到底在做什么?这是否将患者的 objectId 和数据添加到医生集合中的适当数组中?
    • 它使用 ID 来获取相应的患者和数据对象,然后将这些对象添加到相应的数组中。您需要在“POST”请求中手动将 ID 添加到 patientsdata 数组中。
    • 当您说它“使用 ID”时。您是指患者和数据收集的 ID 还是医生收集的 ID?。
    • 我的意思是 patientsdata 集合的 ID,是的。
    • 所以我可以通过使用后处理程序和正文解析器填充数据来创建患者文档。这将创建一个带有 objectID 的文档。这将允许我在这种情况下使用 .populate("patients") 吗?否则它不会起作用,因为患者需要有一个 ObjectID 对吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多