1

我有以下代码:

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 还是整个对象?

4

1 回答 1

0

我设法通过以下方式解决它:

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 覆盖了。

于 2013-04-19T13:42:50.507 回答