当前位置: 首页 > 知识库问答 >
问题:

MongoDB NodeJS本地驱动程序(MongoDB)与Mongo Shell性能的关系

周培
2023-03-14

我在表1中的MongoDB中有10000条记录。

"_id" : ObjectId("5d5e500cb89312272cfe51fc"),
"cities" : [ 
    {
        "cityid" : "5d5d2205cdd42d1cf0a92b33",
        "value" : "XYZ"
    }, 
    {
        "cityid" : "5d5d2214cdd42d1cf0a92b34",
        "value" : "Rowcliffe"
    }, 
],
      {
        $unwind: "$cities"
      },
      { "$addFields": { "cities.cityid": { "$toObjectId": "$cities.cityid" } } },
      {
        $lookup: {
          from: "cities",
          localField: "cities.cityid",
          foreignField: "_id",
          as: "docs"
        }
      },

我在0.08秒内得到10000条记录的结果。

现在,同样的查询m在nodejs中使用mongodb本地驱动程序运行,在15秒内得到结果。

我不明白为什么这两者之间有这么大的区别。我不知道我在nodejs中做错了什么。我已经用mongodb本地驱动程序在nodejs中编写了相同的查询。

共有1个答案

孟永望
2023-03-14

在Robo3T中,有一个默认的查询限制,所以它需要更少的时间,因为当它获取限制时,它将退出。

为了避免这种情况,您需要在查询执行中添加以下片段:

// change the limit size, default 50
DBQuery.shellBatchSize = 500000; 
 类似资料:
  • 驱动程序版本为: 我的问题是,当我使用api find和一些来自java的过滤器时,操作需要15秒。 我检查了mongo服务器日志文件,发现跟踪是一个命令,而不是一个查询: 2015-09-01T12:11:47.496+0200I命令[conn503]命令b.$CMD命令:计数{count:“logs”,查询:{timestamp:{$GTE:新日期(1433109600000)},aplica

  • 我在express中使用mongodb本机驱动程序。js应用程序。数据库中大约有6个集合,因此我创建了6个js文件,每个文件都有一个集合作为javascript对象(例如),原型函数处理这些集合上的所有操作。我觉得这是一个很好的建筑。 但我遇到的问题是如何连接到数据库?我应该在每个文件中创建一个连接并使用它们吗?我认为这太过分了,因为mongodb本机驱动程序中的connect会创建一个连接池,而

  • 这是我在运行上述程序时遇到的错误。有人解决了这个问题吗? 我尝试过改变Selenium和ChromeDriver的版本,但没有任何效果。

  • 在nodejs中,根据每个请求打开mongodb连接,然后在回调中关闭它是一种好做法吗? 有人说,没有必要在每个请求上打开/关闭mongodb连接,因为一旦打开,就可以共享一个连接池。 问题是如何维护和共享该池?猫鼬已经自动做到了吗? 尤其是在mongodb超时或断开连接时,是否需要重新连接? 我在这里发现了相互矛盾的答案:是否根据请求关闭mongodb连接 我读到的几乎所有在线doc nodej

  • 问题内容: 我们当前的连接配置如下所示: 并且已在当前版本(源代码)中弃用,并将被删除:“此方法无法替代。使用connectTimeout属性控制连接超时。” 我认为重试和连接超时是两回事。有谁知道为什么改变了它以及它有什么(内部)含义? 问题答案: 关于autoConnectRetry的含义有很多困惑。大多数人认为这意味着,如果操作由于IOException而失败,驱动程序将重试该操作,直到ma

  • 问题内容: 我想对MongoDB驱动程序作出承诺。我写了以下代码: 您是否知道为什么在调用该方法时为什么没有输出: 问题答案: 手动散布API是很危险的,我建议采取以下措施: 有了Bluebird的承诺,它看起来就像: