1

我在表 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"
        }
      },

所以,我在这里用 Robo3T 和 mongo shell 中的查找查询在另一个表中查找 cityid。一切正常。

对于 10000 条记录,我在0.08 秒内得到结果。

现在,使用 mongodb native driver 在 nodejs 中运行相同的查询 m ,这里 m 在15 sec内得到结果。

我不明白为什么这之间存在如此巨大的差异。我不知道我在 nodejs 中做错了什么。我在 nodejs 中使用 mongodb 本机驱动程序编写了相同的查询。

请让我知道我做错了什么。

为什么这个nodejs mongodb原生驱动性能这么差?

4

1 回答 1

1

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

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

// change the limit size, default 50
DBQuery.shellBatchSize = 500000; 
于 2019-09-05T06:41:16.960 回答