【发布时间】:2019-06-26 16:27:48
【问题描述】:
排序超出了 104857600 字节的内存限制,但未选择外部排序。中止操作。
【问题讨论】:
排序超出了 104857600 字节的内存限制,但未选择外部排序。中止操作。
【问题讨论】:
如图所示,您需要将 {allowDiskUse : true} 传递给 mongo。只需将其附加到查询的末尾即可。
db.collection.aggregate([
...
],
{
allowDiskUse: true
}
);
【讨论】:
如果你使用猫鼬,试试这个:
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
【讨论】:
对于看到此内容的具有 SQL 背景的人。我们通常将“ORDER BY”子句放在查询的末尾。我本能地把我的“排序”子句放在了聚合的最后一部分。
使用 Mongo 聚合,我认为优化器智能地移动“排序”子句的摆动空间更小。因此,如果在逻辑上它适用于您的查询,则将“排序”子句放在顶部,并结合索引,您可以优化解决问题的方法。
[
{$match: ...},
{$project: ...},
{sort: {time: -1}},
]
=>
[
{sort: {time: -1}},
{$match: ...},
{$project: ...}
]
【讨论】: