Javascript MongoDB Bulkwrite查询冻结Node.js响应

Javascript MongoDB Bulkwrite查询冻结Node.js响应,javascript,node.js,mongodb,mongoose,bulkupdate,Javascript,Node.js,Mongodb,Mongoose,Bulkupdate,我正在通过node.js API测试MongoDB上的批量更新。更新50000个条目大约需要8分30秒,然后MongoDB完成其工作,但没有从Node.js API获得API响应 在此过程中,CPU使用率为32%,磁盘使用率为100% 我在这里提到了一些基本代码,通过这些代码你们可以了解: // I am using mongoose. let filteredArray = [...]//contains 50000 entries console.time() let bulkOps =

我正在通过node.js API测试MongoDB上的批量更新。更新50000个条目大约需要8分30秒,然后MongoDB完成其工作,但没有从Node.js API获得API响应

在此过程中,CPU使用率为32%,磁盘使用率为100% 我在这里提到了一些基本代码,通过这些代码你们可以了解:

// I am using mongoose.
let filteredArray = [...]//contains 50000 entries
console.time()


let bulkOps = [];
filteredArray.map( (x) => {
    let upsertDoc = {
        'updateOne': {
            'filter': { keywords: x.keywords },
            'update': {
                $inc: { counter: -1 },
                $pull: {
                    data: {
                        dataid: req.body.dataid
                    },
                },
            },
            'upsert': true
        }
    }
bulkOps.push(upsertDoc);
});
await TestDataTable.bulkWrite(bulkOps);
console.timeEnd()
return res.send({status: 200, message: "Enteries updated successfully"})
有人知道node.js为什么没有响应并返回响应吗?在此方面,我们非常感谢您的帮助

另一种方法 这种方法大约需要2分10秒才能完成任务

在此过程中,CPU使用率为100%,磁盘使用率为100%

console.time()
                    await Promise.all(
                        filteredArray.map(async (x) => {
                            await TestDataTable.updateOne(
                                { keywords: x.keywords },
                                {
                                    $inc: { counter: -1 },
                                    $pull: {
                                       data: {
                                          dataid: req.body.dataid
                                       },
                                    },
                                },
                            ).exec();
                        }),
                    );
                    console.timeEnd()
return res.send({status: 200, message: "Enteries updated successfully"})


但是这里也没有得到API响应。

bulkWrite是返回承诺还是只与回调一起工作?(顺便说一句,在你编写的代码中,你不处理发送500失败的情况)我有这个场景,但我没有提到,因为我认为这里不需要。你确定没有套接字超时吗?对于单个http请求来说,8分钟听起来很糟糕。你能详细说明一下“没有得到API响应”吗。tcpdump是怎么说的呢?所以在MongoDB更新任务完成后,我希望Node.js会响应条目被更新。但它是完全空白的,意味着没有输出响应。是的,大约需要8分钟。如果我使用循环,在循环下一个接一个地更新条目,则需要大约2分30秒的时间。我试过了also@AlexBlex我更新了问题。请看一下