MongoDB数据量大,翻页报错,200多万

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.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秒的加速速度

    缺点:如果三天之内的条件放开,依然卡得出翔。


求路过高僧指导。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值