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

与mongo shell或robo3t相比,NodeJs mongoose的性能较慢

浦德义
2023-03-14

我正在运行一个查询,使用聚合打印大约300个结果。

在Robo3t/Mongo shell中执行查询非常快,但在NodeJS中使用mongoose执行查询时非常慢。

尝试寻找答案,登陆到这个链接,尝试设置dbquery.shellbatchsize=500000;,但是两个查询的差异仍然是7-8秒

db.getCollection('fixed_activities').aggregate([
    {
      $lookup: {
        from: "city",
        localField: "activity_city",
        foreignField: "_id",
        as: "activity_location"
      }
    },
    {
      $lookup: {
        from: "rate_sheet_activity_prices",
        localField: "_id",
        foreignField: "act_id",
        as: "rate_sheets"
      }
    },
    {
      $lookup: {
        from: "organizations",
        localField: "rate_sheets.rate_sheet_id",
        foreignField: "rate_sheets.rate_sheet_id",
        as: "org_id"
      }
    },
    {
      $lookup: {
        from: "images",
        localField: "activity_image",
        foreignField: "_id",
        as: "activity_image"
      }
    },
    { $match: { org_id: { $exists: true, $not: { $size: 0 } } } }
  ])

共有1个答案

唐默
2023-03-14

我也遇到了同样的问题,我的解决方案是从mongoose切换到NodeJS中的本地mongodb控制器。

https://mongodb.github.io/node-mongodb-native/3.3/installation-guide/installation-guide/

 类似资料:
  • 更新:为了更明显地说明我正在努力做的事情:我将拥有5000万以上的设备流媒体音频。流平均为100KB,峰值流量时为200K流/分钟。我正在寻找一种存储解决方案来满足这种需求。我一直在研究Bookkeeper、Kafka、Ignite、Cassandra和Redis。到目前为止,我只对redis和ignite进行了基准测试,但我很惊讶ignite这么慢。

  • JavaScript 有两种方式判断两个值是否相等。 等于操作符 等于操作符由两个等号组成:== JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。 "" == "0" // false 0 == "" // true 0 == "0"

  • 问题内容: 我试图找出如果将主键更改为BIGINT(20)时表的性能是否会下降。目前,我正在使用INT(7),并且已经有大约 300.000个条目具有大ID(7或8位数字) 。我已经搜索了很多东西,但只发现它使用了更多的磁盘空间(这很明显)。 我所有的ID现在都有7位数字,但是我的客户希望更改为8位数字。将来我将无法轻松更改软件,因此我考虑现在使用BIGINT(20)以防万一。即使我不需要使用BI

  • 这个问题之后的讨论让我感到疑惑,所以我决定运行一些测试,比较和在Python中创建集合的创建时间(我使用的是Python3.7)。 我比较了使用和的两种方法。这两项结果均与以下结果一致*: 结果:0.30240735499999993 所以第二种方法几乎比第一种方法快3倍。这对我来说是一个很大的差别。通过这种方式优化set文字相对于方法的性能,究竟是怎么回事?在哪些情况下,哪一个是可取的? *注意

  • 一般来说,原生系统比docker容器快多少?