缓慢的mongoose请求

我一直在很慢的Mongoose查询。 我已经缩小到Mongoose创build对象的方式或数据库服务器请求中的实际延迟。 我几乎没有数据库中的任何数据(4个集合中的<1000个对象),并手动查询(类似于产品中的查询),并对它们进行分析,它们都运行<2-4毫秒。

通过在线search/查看文档,我无法找出两个大问题:

  1. 我如何获得Mongoose在Mongo上运行的原始查询?
  2. 有多less次访问数据库服务器的呼叫,例如,如果我有一个查询,有几个填充调用,一个sorting调用,并在callback函数中嵌套的填充调用多less次到服务器。

以下是我看到的一些延迟时间:

Login localhost + localDB = 58ms localhost + mongoHQ = 127ms heroku + mongoHQ = 287ms Get Data localhost + localDB = 281ms localhost + mongoHQ = 1657ms heroku + mongoHQ = 2190ms 

更新1

我想出了如何logging查询,并检查了一堆。 我觉得它下降到一个查询与一堆填充调用 – 我注意到,在生成查询的人口部分,Mongoose输出一个Mongo查询,如:

 users.find({ _id: { '$in': [ ObjectId("531ec0e17c0b16a82be4f506"), ObjectId("531ec0e17c0b16a82be4f506"), ObjectId("531ec0e17c0b16a82be4f506") ... 

其中的ID重复多次(在这种情况下,数百次) – 我认为这是减速和testing代码的原因,我发现每个填充调用都会在请求时间内增加大约.3s-.5s。 populate调用也运行在一个数组字段上 – 这也保证了在100s内查询的id数 – 低1000(重复)。

有没有办法删除重复的条目时,进行填充调用?

尝试改变您的查询使用“精益”选项,看看是否减less的时间。 这将绕过mongoose实体创build。

http://mongoosejs.com/docs/api.html#query_Query-lean