尝试使用填充将两个子集合关联到父集合

Posted

技术标签:

【中文标题】尝试使用填充将两个子集合关联到父集合【英文标题】: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");
)

【问题讨论】:

【参考方案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 对吗?

以上是关于尝试使用填充将两个子集合关联到父集合的主要内容,如果未能解决你的问题,请参考以下文章

P1466 集合 Subset Sums(01背包求填充方案数)

拆分集合为相等的子集合(第1届第1题)

等和的分隔子集(DP)

并查集

有没有办法在查询主集合时将子集合映射到结构? (火库)

Google Pub/Sub 更新 Firestore 子集合