【发布时间】:2016-10-03 19:23:39
【问题描述】:
我正在聚合具有 100 万条记录的集合上的数据。 匹配查询使用索引。 在下面找到代码参考 -
AggregateIterable<Document> aggregateIterable = timeCollection.aggregate(Arrays.asList(match, project,group)).batchSize(1000).allowDiskUse(true);
long curStartTs = Calendar.getInstance().getTimeInMillis();
MongoCursor<Document> cursor = aggregateIterable.iterator(); //this line roughly takes 15 seconds
long curEndTs = Calendar.getInstance().getTimeInMillis();
System.out.println("Cursor time - " + (curEndTs - curStartTs));
最终结果列表包含 3500 条记录。
现在我通过在聚合管道中传递 $limit 来限制记录 -
Document limitParam = new Document("$limit",30);
AggregateIterable<Document> aggregateIterable = timeCollection.aggregate(Arrays.asList(match, project,group,limitParam)).batchSize(1000).allowDiskUse(true);
long curStartTs = Calendar.getInstance().getTimeInMillis();
MongoCursor<Document> cursor = aggregateIterable.iterator(); //this line still taking around 15 seconds
long curEndTs = Calendar.getInstance().getTimeInMillis();
System.out.println("Cursor time - " + (curEndTs - curStartTs));
最终结果列表现在只包含 30 条记录。
我无法理解为什么在两种情况下没有时间变化。 即使提供了管道中的限制,为什么 aggregateIterable.iterator() 的时间与管道中没有限制的情况相同?
非常感谢。
亲切的问候,
Vibhav
【问题讨论】:
标签: mongodb mongodb-query limit aggregation-framework mongodb-aggregation