MongoDB.Driver.MongoCommandException: Command aggregate failed: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in..
在 MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Execute(Expression expression)
在 MongoDB.Driver.Linq.MongoQueryableImpl`2.GetEnumerator()
求高僧开导。
------------------------------------ 临时解决方案 01 ------------------------------------------------------------------
1. AggregateOptions args = new AggregateOptions {
AllowDiskUse = true
};
var starDt = DateTime.Now.AddDays(-2);//三天之内
var endDt = DateTime.Now;
var query = _mongo.海量表(几百万).Aggregate(args).ToList().Where(q => q.CreateTime >= starDt && q.CreateTime <= endDt).Select(q => new
{
});
优点:AllowDiskUse 开关,相当于拿硬盘补充内存,可消除查询超时的异常。
缺点:必须要ToList()才能进行Where链条查询,依然没有解决性能问题
2. var starDt = DateTime.Now.AddDays(-2);//三天之内
var endDt = DateTime.Now;
var query = _mongo.海量表.Find(q => q.CreateTime >= starDt && q.CreateTime <= endDt);.
优点:Find可以返回一个IFindFluent<TDocument, TDocument>类型,可以马上进行Where查询操作,之后再进行ToList(),200w海量库从90秒提升到6秒的加速速度
缺点:如果三天之内的条件放开,依然卡得出翔。
求路过高僧指导。