当前位置: 首页 > 面试题库 >

在Node.js中循环使用findOne会花费很长时间

柯伟志
2023-03-14
问题内容

我将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. 我看到执行时间,并且“文件已保存!” 首先输入字符串,然后在控制台中看到朋友的名字。这是为什么?我不应该先看名字然后再看执行时间吗?是否因为Node.js的异步特性?
  2. 名称在控制台中的打印速度非常慢,速度就像两秒钟内出现一个名称一样。为什么这么慢?有没有办法使过程更快?

编辑:

将朋友列表细分成较小的块并异步调用朋友是个好主意吗?这样会使过程更快吗?

编辑2:

我将代码更改为此:

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

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

这不会产生错误,但是也不会输出任何内容。

提前致谢。


问题答案:
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
                                    }    
                                });


 类似资料:
  • 问题内容: 我已经阅读了许多示例,并最终使用以下代码从Java程序内部执行了命令行命令。 我已经用一个简单的ls命令测试了它,并且工作正常。当我尝试运行另一个命令时,它将永远耗费时间(保持运行25分钟,但尚未停止)。 当我在命令行上执行tabix命令时,我得到以下统计信息 4.173u 0.012s 0:04.22 99.0%0 + 0k 0 + 0io 0pf + 0w 因此,它应该很快完成。

  • 当我想启动我的jboss AS 7服务器时,需要很长时间才能开始。我正在使用netbean 7.4 这个jboss AS 7实际上是如何运行的?我应该从standalone.bat文件启动服务器吗?还是从netbean? 10: 34:15303信息[org.jboss.modules]jboss模块版本1.1.1。GA 10:34:15422信息[org.jboss.msc]jboss msc版

  • 我一直在尝试使用neo4jphp为我们的新模块创建节点和关系[https://github.com/jadell/neo4jphp/wiki]. 我使用cypher查询实现同样的功能。 到目前为止,节点创建工作在gr8中。 但是,当我尝试为节点创建独特的关系时,它花费的时间太长。。。。 注意:标签用户有唯一的约束userid,因此带有标签用户的节点由属性userid上的Neo4j索引。 我们还有其

  • 问题内容: 我注意到,使用基本操作系统Alpine与CentOS或Debian在Docker容器中安装Pandas和Numpy(它的依赖项)需要花费更长的时间。我在下面创建了一个小测试来演示时差。除了Alpine用来更新和下载构建依赖项以安装Pandas和Numpy的几秒钟之外,为什么setup.py所需的时间比Debian的安装要多70倍? 是否有任何方法可以使用Alpine作为基础映像来加快安

  • 我有一个很大的C代码文件(>9000 LoC),并尝试使用以下语法对其进行解析: 感谢任何帮助;)

  • 我们启动一个Kafka消费者,监听一个可能还没有创建的主题(不过,主题自动创建是启用的)。 此后不久,一位制作人发表了关于这个话题的消息。 Kafka原木