我目前正在运行几个(重)文档的集合。
该文档的某些字段非常繁重,我们在投影阶段将它们排除在外。
我们发现排序实际上是在投影之前完成的,导致了一些内存问题:
溢出排序阶段缓冲数据使用量33658319字节超过内部限制33554432字节
以下是问题:
答案 0 :(得分:2)
我认为您无法直接指定获胜计划,但您可以使用cursor.hint()
选择要在查询中使用的索引,这将影响获胜计划。例如,如果要进行完整集合扫描,请使用{ $natural : 1 }
。
请注意,从MongoDB 2.6
开始,如果您的查询形状存在索引过滤器,则会忽略hint()
(query
,sort
和{{1的组合}})。
是的,您可以使用aggregation framework指定操作的顺序,并在project
之前执行$project
。
如果排序在$sort
,$project
和$unwind
之前完成,则可以利用索引。否则就无法做到。 From the docs:
$ sort运算符和性能
$group
运算符在放置在管道的开头或放在$sort
,$project
和$unwind
聚合运算符之前时可以利用索引。如果在$group
操作之前发生$project
,$unwind
或$group
,则$sort
无法使用任何索引。