所以我使用的是MongoDB的聚合框架,并且正在对当前包含大约700K文档的集合执行查询。这是查询:
db.logs.aggregate(
{'$match' : { 'tag' : 'TAG-XYZ' }},
{'$project' : {
'tag' : '$common_tag.bId'
}},
{'$unwind' : '$tag'},
{'$group' : {
'_id' : '$tag',
'total' : {'$sum' : 1}
}},
{'$sort':{'_id':1}},
{'$skip':0},
{'$limit':20}
)
logs
包含大约20个字段。 tag
是一个平均10个标签的数组,common_tag
只是一个嵌入式文档,它将某些分类标记与标记数组分开,以消除$unwind
tag
的初始使用1}}。我使用分页,因此skip
的值是可变的。请注意,使用查询,因此没有固定的结果集。
问题是查询至少需要30秒才能执行。我担心的是数据集不断增长,它可能不支持我的实时(或接近实时)查询要求。有没有更好的方法来改进查询?