我有一个大的(数百万)文件集合,其中tags是一个像这样的数组字段。
{
"volume" : "abc",
"name" : "file1.txt",
"type" : "txt",
"tags" : [ "Interesting", "Weird" ], ...many other fields
}
现在我想返回整个集合的唯一标签数量。我正在使用aggregate
。这是我的疑问。
db.files.aggregate(
{ "$match" : {"volume":"abc"}},
{ "$project" : { "tags" : 1}},
{ "$unwind" : "$tags"},
{ "$group" : { "_id" : "$tags" , "count" : { "$sum" : 1}}},
{ "$sort" : { "count" : 1}}
)
我发现这需要大约3秒才能返回1.2M文件的集合。我的tags
和volume
字段都有索引。
我正在使用MongoDB 2.4。由于2.6没有出来,我不能在这里使用.explain()
。
我有什么想法可以改善这种表现?我需要有一个摘要计数。此外,我无法预先计算这些计数,因为我的$match
将根据数量,类型,特定标记,文件的某个日期时间等变化。