我的Mongoose查询速度非常慢。我把它缩小到Mongoose创建对象的方式或db服务器请求中的实际延迟。我几乎没有数据库中的任何数据(< 4个集合中的每一个中的1000个对象)并且手动运行查询(类似于产品中的查询)并对它们进行分析并且它们都运行< 2-4毫秒。
通过在线搜索/查看文档我无法弄清楚的两个大问题:
以下是我看到的一些延迟时间:
Login
localhost + localDB = 58ms
localhost + mongoHQ = 127ms
heroku + mongoHQ = 287ms
Get Data
localhost + localDB = 281ms
localhost + mongoHQ = 1657ms
heroku + mongoHQ = 2190ms
更新1
我想出了如何记录查询并检查了一堆查询。我认为它会通过一堆填充调用进入一个查询 - 我注意到在生成查询的填充部分时,Mongoose输出一个Mongo查询,如:
users.find({ _id: { '$in': [ ObjectId("531ec0e17c0b16a82be4f506"),
ObjectId("531ec0e17c0b16a82be4f506"), ObjectId("531ec0e17c0b16a82be4f506") ...
其中id重复多次(在这种情况下是几百次) - 我认为这是导致减速和测试代码的原因我发现每个填充调用在请求时间增加了大约.3s-.5s 。填充调用也在数组字段上运行 - 这也保持了在100s内查询的id数量 - 低1000(重复)。
有没有办法在进行填充调用时删除重复的条目?
答案 0 :(得分:5)
尝试更改您的查询以使用“精简”选项,并查看时间量是否减少。这将绕过mongoose实体创建。