[英]Lookup Operation Slow
我有以下查詢:
query = [{
$match: {
$and: [{
feed: {
$in: feeds
}
}, {
updatedAt: {
$gte: new Date(date)
}
}
]
}
},
{
$lookup: {
from: "feed",
localField: "feed",
foreignField: "_id",
as: "feed"
}
},
{
$unwind: {
path: "$feed",
preserveNullAndEmptyArrays: true
}
},
{
$lookup: {
from: "source",
localField: "feed.source",
foreignField: "_id",
as: "feed.source",
}
},
{
$sort: {
updatedAt: -1
}
},
{
$limit: limit
},
{
$skip: skip
}
];
該查詢花費的時間太長,大約需要10秒。
我讀了https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/,但速度仍然很慢。
我正在尋找盡可能優化的方法,有沒有辦法? 該集合的索引為$ updatedAt:-1
有任何想法嗎?
如果要快速運行,建議您刪除$lookup
管道階段,並根據其用法對文檔建模。
但是,您可以在聚合查詢的第一個匹配部分(updatedAt,提要)上添加索引。 但是您仍然會遇到一個問題,即您仍在從另外兩個不使用任何索引的集合中查找。
當$ match和$ sort管道運算符出現在管道的開頭時,它們可以利用索引。
https://docs.mongodb.com/master/core/aggregation-pipeline/#pipeline-operators-and-indexes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.