gpt4 book ai didi

javascript - 在 Node.js 中循环使用 findOne 需要太长时间

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:33 24 4
gpt4 key购买 nike

我将 Node.js 与 MongoDB 一起使用,我还使用 Monk 进行数据库访问。我有以下代码:

console.time("start");

collection.findOne({name: "jason"},
function(err, document) {

for(var i = 0; i < document.friends.length; i++) // "friends is an array contains ids of the user's friends"
{
collection.findOne({id: document.friends[i]}, function(err, doc)
{
console.log(doc.name);
});
}

});

console.log("The file was saved!");
console.timeEnd("start");

我对这段代码有两个问题:

  1. 我看到了执行时间和“文件已保存!”首先是字符串,然后我在控制台中看到 friend 的名字。这是为什么?我不应该先看到名称然后再看到执行时间吗?是因为 Node.js 的异步特性吗?
  2. 控制台中打印名字的速度非常慢,速度就像两秒打印一个名字。为什么这么慢?有没有办法让这个过程更快?

编辑:

将好友列表分成更小的部分并异步调用好友是个好主意吗?它会让这个过程更快吗?

编辑2:

我将代码更改为:

collection.find({ id: { "$in": document.friends}}).then(function(err, doc)
{
console.log(doc.name);

if(err) {
return console.log(err);
}
}

这不会给出错误,但也不会打印任何内容。

提前致谢。

最佳答案

问题1的回答:是的,你说得对。

是因为 Node.js 的异步特性吗?

为了防止 Node.js 提供了某种机制,您可以使用它,否则您可以通过设置一个标志来手动完成此操作。

问题2的答案:

您可以使用$in代替findOne,这样既方便又快捷。

例如.find({ "fieldx": { "$in": arr } })

arr :- 在此您需要提供整个数组。

关于javascript - 在 Node.js 中循环使用 findOne 需要太长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45189606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com