此查询可以更快:
db.foo.aggregate([
{"$match": {"uid": {"$in": ["40001"]}}},
{
"$group": {
"read": {"$sum": {"$cond": ["$read", 0, 1]}},
"imp": {"$sum": {"$cond": ["$important", 1, 0]}},
"_id": {"group_by": "$group_by", "ip_group": "$ip_group"},
"date": {"$min": "$date_meta.dt"}, "count": {"$sum": 1}
}
},
{"$sort": {"start_time": -1}}
])
大约1mil。对于每个其他uid聚合的uid =“40001”(大约900000 - 90%的收集),它需要大约2,3秒的文档要快得多。因此看起来mongo大部分时间都在减少结果。 我厌倦了删除条件语句,但没有获得任何速度。所以看起来没有什么可以做,但我可能会忽略某点。 哦,我尝试使用索引,并删除$ sort选项但没有改进。
答案 0 :(得分:1)
如果MongoDB必须将大量文档加载到内存中(900,000是一个很好的数量),则需要一些时间。改善这种情况的方法是......
如果该组显着减少文档数量,则Sharding将正常工作。这是因为初始组工作将在每个分片上完成,然后在MongoS上重新完成。