在Node.js中循环使用findOne会花费很长时间
发布于 2021-01-31 23:15:02
我将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");
关于此代码,我有两个问题:
- 我看到执行时间,并且“文件已保存!” 首先输入字符串,然后在控制台中看到朋友的名字。这是为什么?我不应该先看名字然后再看执行时间吗?是否因为Node.js的异步特性?
- 名称在控制台中的打印速度非常慢,速度就像两秒钟内出现一个名称一样。为什么这么慢?有没有办法使过程更快?
编辑:
将朋友列表细分成较小的块并异步调用朋友是个好主意吗?这样会使过程更快吗?
编辑2:
我将代码更改为此:
collection.find({ id: { "$in": document.friends}}).then(function(err, doc)
{
console.log(doc.name);
if(err) {
return console.log(err);
}
}
这不会产生错误,但是也不会输出任何内容。
提前致谢。
关注者
0
被浏览
91
1 个回答
-
collection.aggregate([ { $match:{ id :{ "$in" : document.friends}, } } ]).exec(function ( e, d ) { console.log( d ) if(!e){ // your code when got data successfully }else{ // your code when you got the error } });
推荐阅读
-
在node.js中长时间运行的计算
2021-01-31 关注 0 浏览81 1答案
-
如何避免在Node.js中长时间嵌套异步函数
2021-02-02 关注 0 浏览74 1答案
-
在node.js中异步循环
2021-01-31 关注 0 浏览107 1答案
-
在node.js中异步循环
2021-02-02 关注 0 浏览99 1答案
-
如何避免Node.js中异步函数的长时间嵌套
2021-01-31 关注 0 浏览142 1答案
-
node.js mongojs findOne回调返回错误为null
2021-01-31 关注 0 浏览64 1答案
-
使用Node.js异步请求在Redis中进行循环
2021-02-01 关注 0 浏览207 1答案
-
在Node.js中处理异步循环的最佳模式
2021-02-01 关注 0 浏览164 1答案
-
Node.js事件循环
2021-01-31 关注 0 浏览382 1答案
-
在Node.js中将多个文件写入循环
2021-01-31 关注 0 浏览143 1答案