我有一个拥有数百万行的 MongoDB 集合,正在尝试优化查询。目前我使用聚合框架检索数据并按照我的要求对其进行分组。我的典型聚合查询类似于: $match > $group > $ group > $project
然而,我注意到前面的部分是最慢的,最后的部分仅需要几毫秒。
我尝试仅使用$match过滤器执行查询,然后使用collection.find执行相同的查询。聚合查询需要约80毫秒,而查找查询需要0或1毫秒。
我几乎在每个字段上都建立了索引,所以我想这不是问题所在。有什么想法会出现什么问题吗?还是聚合框架的“正常”缺点?
我可以使用查找查询代替聚合查询,但我需要在请求之后执行大量处理,并且可以使用$group
等快速完成此过程。因此,我宁愿保留聚合框架。
谢谢,
编辑:
以下是我的标准:
{
"action" : "click",
"timestamp" : {
"$gt" : ISODate("2015-01-01T00:00:00Z"),
"$lt" : ISODate("2015-02-011T00:00:00Z")
},
"itemId" : "5"
}
$match
和find
吗?在大多数情况下,$match
和find
应该是等价的,但我想看看你正在比较哪些语句,以便给出精确的答案。此外,你是先运行聚合,然后再运行find
的吗?如果你重复这两个操作并比较时间,会发生什么?差异可能是将结果从磁盘移动到内存的成本。 - wdberkeley