Node.js和MongoDB顺序写入导致竞争状态?

(实际问题:这是顺序写入mongodb,不会导致竞争条件,并且是非阻塞的正确方法?)

我正在尝试在mongodb中完成文档的顺序写入/更新。 操作的顺序是有一定的关键的。 在下一个操作发送到数据库之前必须完成一个操作。

我现在所做的方式是使用Bluebirds Promise.mapSeries()循环请求,并对正确的集合执行正确的操作。 数据库函数然后返回一个Promise给循环。 我相信这是正确的事情。 当承诺解决后,下一次迭代将被解雇。 我相信这也应该是非阻塞的。

对于这个问题。 一堆插入和集合包含大约500k文件后,更新开始失败。 我想要更新的状态不会反映在数据库中。 mongo中没有任何迹象表明操作失败,更改不在数据库中。

数据库是正确的索引,所以不应该在我看来是一个问题。 I / O负载相当高。 目前在开发testing中,每秒大约有250个操作。 在生产这个数字可能是200倍左右。

这里是我现在这样做的片段:

 Promise.mapSeries(testResults, (result) => { if (result.test) { // Save sequence results and status if (result.test.testSequence) { const coll = db.collection(collection); // query = result.test.id; // newValues = result.test; const options = { upsert: true, w: 'majority', // Writeconcern j: false, wtimeout: 5000 // Timeout after 5 sec }; return coll.updateOne(query, newValues, options); } else if(result.test.singleTest { // Do pretty much the same as above } } 

感谢意见:)