MongoDB:聚合组由大型集合中的字段组成

时间:2014-04-04 19:28:46

标签: mongodb aggregation-framework

我有一个大的(数百万)文件集合,其中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文件的集合。我的tagsvolume字段都有索引。

我正在使用MongoDB 2.4。由于2.6没有出来,我不能在这里使用.explain()

我有什么想法可以改善这种表现?我需要有一个摘要计数。此外,我无法预先计算这些计数,因为我的$match将根据数量,类型,特定标记,文件的某个日期时间等变化。

0 个答案:

没有答案