2017-06-14 8 views
0

私はnodejsの開発者です。私は、更新タスクを実行するために、水線ORMと非同期のlibでMongodbを使用しています。以下は私の次のステップです水線orm、mongodbおよびasync.parallelを使用してデータベースレコードを更新する

function update(task, payload, next) { 
    const self = this; 

    async.auto({ 
     createUpdateObj : (callback) => { 
      let update = { status : payload.status }; 

      return callback(null, update); 
     }, 
     updateTask : ['createUpdate', (result, callback) => { 
      self.waterline.collections.task.update(task.id, result.creatUpdateObj, callback); 
     }] 
    }, (err, results) => { 
     if(err) return next(err); 

     return next(null, { message : "Task updated successfully." }); 
    }); 
} 

let dbTasks = [ { id : 1, name : 'Testing', status : 'To Do' }, { id : 2, name : 'Development', status : 'In Progress' } ] 

let asyncTasks = []; 

let payload = { 
    tasks = [{ id : 1, status : 'Done'}, {id : 2, status : 'Testing'}] 
}; 

dbTasks.forEach((task, index) => { 
    asyncTasks.push(function(cb) { 

     update.bind(hapiServerObject)(task, payload.tasks[index], cb) 
    }); 
}); 

async.parallel(asyncTasks, console.log); // It prints the response message 2 times. 

上記はコードです。コードは期待どおりに動作しますが、私が直面している問題のみです。データベースのすべてのタスクステータスが「テスト」に更新されます。つまり、最後のデータベース更新クエリは他のすべてのステータスを更新します。

更新クエリの後、期待される結果は

[ { id : 1, name : 'Testing', status : 'Done' }, { id : 2, name : 'Development', status : 'Testing' } ] 

実際の結果は、私が間違っているつもりですどこ私は得ていないのです

[ { id : 1, name : 'Testing', status : 'Testing' }, { id : 2, name : 'Development', status : 'Testing' } ] 

であるべきです。私はオブジェクトの参照に関連することを知っているが、私はrefrenceが変更される場所を見つけることができません。クエリが実行される前にオブジェクトの作成はOKです。

使用ツール: - hapijs、waterline - > 0.11、asyncモジュールおよびmongodb。

答えて

0

私は答えを見つけました。コードが正常に動作しています。問題は、タスクを更新する前に、私はmongodbからレコードの "_id"を取得するためのネイティブの水のクエリを使用しています。ウォーターラインはネイティブクエリの結果から受け取った "_id"の値を理解していません。 だから、喫水線更新クエリは

waterline.collections.collection.update({}, { status : "Testing" }).exec() 

そしてこうして

waterline.collections.collection.update({ id : _id }, { status : "Testing" }).exec() 

から、すべてのレコードが最後のDBクエリのステータスで更新されますとなります。

関連する問題