我有以下代码:
add_new_patient : function(username,pname,pid,pdesc,callback){
var find_md = function(){
return function(err,pat){
if (err){
console.log('Error at adding patient: error at searching for users');
callback(2);//In the callback method I'm passing I have specific behavior for error handling for error codes.
return;
}
if (pat.lenth > 0){
console.log('searching for md');
MD.find({'mdname':username},add_patient(pat));
}else{
console.log('Error at adding patient: no user found');
callback(-1);
return;
}
}}
var add_patient = function(pat){
return function(err,md){
if (err){
console.log('Error at adding patient: cannot find md');
callback(-1);
return;
}
callback(0);
}
}
console.log('searching for user '+pid);
User.find({'name':pid},find_md());
}
这些是我的架构:
var mdSchema = mongoose.Schema({
mdname : String,
pacients : [userSchema.ObjectId]
});
var userSchema =mongoose.Schema({
name : String,
password : String,
phone : String,
history : [{timestamp: Date , heart: Number }],
md : {mdname: String, contact: Number}
});
正如您从代码中可以猜到的那样,我想将患者添加到 DMS。首先我在数据库中搜索 pid。如果我找到病人,我就会开始寻找MDS。当我找到 MD 时,我想将患者添加到 MD 中。现在我不知道如何添加它们。该架构显示我有一个 schemaUser 数组,它是患者的类型,但我不知道如何附加到它,而不知道如何根据从查询收到的数据的对象创建 MD 模型。另外我应该在患者数组中插入什么?找到的患者的 _id 还是整个对象?
最佳答案
我设法通过以下方式解决它:
var add_patient = function(pat){
return function(err,md){
if (err){
console.log('Error at adding patient: cannot find md');
callback(-1);
return;
}
var query = {mdname: md.mdname};
console.log(md);
var doThis = { $addToSet: { patients: pat._id } };
console.log(query);
MD.update(query,doThis,done_adding());
}
}
var done_adding = function(){
return function(err,dat){
if (err){
console.log('Error at the end of adding new patient!');
callback(-1);
return;
}
console.log('new patient added');
callback(0);
}
所以它的作用是:当我有要向其添加患者/用户的 md 时,我使用更新方法和 $addToSet 操作,这样我将拥有一组与 md 关联的患者。我不知道为什么,但相同的代码对我来说不适用于 $push 参数。然后什么也没发生,当我将 upsert 选项设置为 true 时,数据库中的整个记录都被 id 覆盖了。
关于node.js - 如何使用嵌套模式更新 mongodb 中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16093276/