2016-11-08 9 views
1

私はfindOneを実行してから、保存します。これは、以前に保存されたオブジェクトを上書きすることです。マングースセーブで正しい保存オブジェクトが返されますが、DBには保存されません

問題は、コールバックでres.json()を保存した後、正しく更新されたデータ(myというループを介して変更されたmyObject)が返されることです。しかし、DBはまだ古い状態で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のテスト、およびオブジェクトが、これは将来的に他の人を助け、私のDB

myObject.markModified('body'); 

ホープ更新

関連する問題