【发布时间】:2019-11-28 05:33:07
【问题描述】:
我正在运行一个使用聚合打印大约 300 个结果的查询。
查询在 robo3t/mongo shell 中执行时非常快,但在 NodeJs 中使用 mongoose 时非常慢。
尝试寻找答案,登陆此 link 尝试设置 DBQuery.shellBatchSize = 500000; 但两个查询的黑白差异仍然在 7-8 秒左右
另外,将 mongoose 和 mongodb 版本更新到今天的最新版本。
这里是查询:
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 } } } }
])
【问题讨论】:
-
让我们尝试在数据库上创建一些索引。
-
我不认为这可以帮助减少服务器端查询的时间,因为节点上 mongo shell 和 mongo 的索引是相同的。或者,如果他们确实以不同的方式使用索引,那就另当别论了,但我认为情况并非如此。