2
我有一篇文章收集存儲列表標籤如下:MongoDB的排序數組大小與大量的文檔
{
id: 1,
title: "Sample title"
tags: ["tag1", "tag2", "tag3", "tag4"]
}
爲了滿足用戶的利益,我使用聚合「匹配」和「setIntersection文章「 來計算用戶的興趣和文章標籤之間有多少個通用標籤,然後對它們進行排序以獲得最佳匹配。
db.article.aggregate([
{
"$match": {
{"tags": {"$in": ["tags", ["tag1", ..., "tag100"]}}
}
},
{
"$project": {
"tags_match": {
"$setIntersection": ["tags", ["tag1", ..., "tag100"]]
},
}
},
{
"$project": {
"tags_match_size": {
"$size": "$tags_match"
},
}
},
{"$sort": {"tags_match_size" : 1}}
{ "$limit" : 40 }
]
);
它工作正常,如果我有幾百個文件的文章收藏。現在我有大約1M篇文章,大概需要半個小時才能完成。
我無法爲「tags_match_size」創建索引以加快運行速度,因爲它是聚合查詢中的新字段。
我怎樣才能使查詢運行得更快? 謝謝。
是的,我沒有創建標籤字段索引。我的查詢不會排序「tags_match_size」,但我想獲得最佳匹配,這就是爲什麼我需要對「tags_match_size」進行排序的原因。謝謝 –