2016-11-08 175 views
1

我正在做一个findOne,然后保存。这是覆盖以前的保存对象。Mongoose保存返回正确的保存对象,但它不保存到DB

问题是,在我的回调中保存res.json()后,返回正确更新的数据(又名myObject,通过我的for循环修改)。但是,“保存”似乎并没有实际发生,因为数据库仍旧在旧状态下显示myObject。

var pathList = [{id:'x',url:'#'}]; 

MyObjects.findOne({'_id': _id}, function(err, myObject) { 
    // 
    for (var i in myObject.body.module) { 
    for (var j = 0; j < pathList.length; j++) { 
     var id = pathList[j].id; 
     myObject.body.module[i].channel[id].buffer = { 
     url:pathList[j].url 
     }; 
    } 
    } 
    // 
    myObject.save(function(err, data) { 
    if (err){ 
     res.json({'response':'Error in saving track: '+err}); 
     throw err; 
    } 
    res.json({ 
     'response': 'done', 
     'data': data 
    }); 
    }); 
}); 

findOne> save的这种方法在我之前已经有效。所以我不会上面的代码工作?并发?对象大小?

任何帮助将是伟大的。由于

+0

为什么在找到之前不定义“保存”?也许它会在您定义保存回调之前发现?如果save函数不是回调函数,并且findone函数是回调函数,那么保存后可能会回调? –

回答

2

挖后,我发现this与下面的代码示例:

Assignment.findOne(function (err, doc) { 
    doc.dueDate.setMonth(3); 
    doc.save(callback); // THIS DOES NOT SAVE YOUR CHANGE 

    doc.markModified('dueDate'); 
    doc.save(callback); // works 
}) 

所以我ofcourse测试,测试对象在我的数据库更新

myObject.markModified('body'); 

希望这有助于其他人在未来