Я просто хочу посмотреть, как объединить разные коллекции. Предположим, у меня есть коллекция пациентов и коллекция врачей. Я хочу сделать это, потому что у врача может быть много пациентов, и я не уверен, должен ли я поместить всех пациентов в массив объектов в поле модели с именем patients : []
или сделать то, что я сейчас пытался практиковать с методом заполнения мангуста.
Теперь у меня другой вопрос. Если я воспользуюсь методом заполнения (присоединения), все пациенты-врачи будут вместе. Я думаю, что это странно, потому что похоже, что личная информация будет перепутана с разными людьми. Я знаю, что populate связывает пациента с врачом, связывая идентификатор с ref
. Это хороший способ сделать это?
В любом случае, я пытался поиграть с populate, но с треском провалился. Я покажу вам код ниже. Если вы можете помочь мне соединить две коллекции так, как я описал, это было бы здорово. Также было бы здорово, если бы вы рассмотрели некоторые другие проблемы.
Что я пытался сделать, так это связать доктора 2 с пациентом 1.
Я получаю сообщение об ошибке:
throw new MongooseError.MissingSchemaError(name);
MissingSchemaError: Schema hasn't been registered for model "Doctor".
Use mongoose.model(name, schema)
Коды
var express = require("express");
var app = express();
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/population");
var db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function(){
console.log("connected")
var doctorSchema = mongoose.Schema({
name : String,
address : String,
username: String,
password : String,
patients : [{type : mongoose.Schema.Types.ObjectId, ref: "Patient"}]
})
var patientSchema = mongoose.Schema({
_doctor : {type: mongoose.Schema.Types.ObjectId, ref : "Doctor"},
name: String,
illness : String
})
//compiling our schem into a Model. A class where we construct documents
var Doctor = mongoose.model("doctor", doctorSchema );
var Patient = mongoose.model("patient", patientSchema);
var doctor1 = new Doctor({name : "doc1", address :"add1", username :"user1", password : "pass1"})
console.log(doctor1.username);
//creating a patient for doctor2
var doctor2 = new Doctor({name: "doc2", address : "add2", username : "user2", password : "pass2"});
doctor2.save(function(err){
var patient1 = new Patient({
name : "pat1",
illness: "high",
_doctor: doctor2._id
})
patient1.save(function(err){
console.log("saved")
})
})
Patient.findOne({name : "pat1"})
.populate("_doctor")
.exec(function(err, patient){
console.log("the creator is %s", patient._doctor.name)
})
})
app.listen(3000, function(){
console.log("listening on port: " , 3000)
})
db.doctors.find()
--{ "_id" : ObjectId("56a0cb74c5ba46780e4d17c6"), "name" : "doc2", "address" : "ad d2", "username" : "user2", "password" : "pass2", "patients" : [ ], "__v" : 0 }
РЕДАКТИРОВАТЬ: должны ли пациенты быть пустым массивом - person jack blank   schedule 22.01.2016