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”进行排序的原因。谢谢 –