IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mongodb分页排序问题 Sort exceeded memory limit of 104857600 bytes but did not opt in to external sorting. -> 正文阅读

[大数据]mongodb分页排序问题 Sort exceeded memory limit of 104857600 bytes but did not opt in to external sorting.

错误信息:

Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in.

错误原因:

MongoDB:排序超出了内存限制的104857600字节

laravel操作mongodb分页遇到的问题

"msg": "Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in.",

实际上是mongodb排序超出了 104857600 字节的内存限制

需要在查询中加上allowDiskUse = true

mongodb语句如下: 查询时候需要加上 allowDiskUse = true

db.bigdata.aggregate(
[
	{$group : {_id : "$range", total : { $sum : 1 }}},
	{$sort : {total : -1}}
],
	{allowDiskUse: true}
);

那么在laravel中怎么体现的呢?

模型

namespace App\Models\Backend;

use Jenssegers\Mongodb\Eloquent\Model;

class SensitiveWordMongodb extends Model
{
    protected $connection = 'content_center';
    protected $table      = 'sensitive_word';
    /***
     * 白名单
     * @var string[]
     */
    protected $fillable = ['wordid', 'word', 'create_time', 'update_time'];
    /**
     * @var string
     */
    protected $primaryKey = '_id';    //设置id
    /**
     * 指定是否模型应该被戳记时间。
     *
     * @var bool
     */
    public $timestamps = false;
}

方法

public function getSensitiveWordList(array $params, int $page = 1, int $pagesize = 10): array
{
    $page = $page <= 0 ? 1 : $page;
    //限制一页获取最大条数
    if ($pagesize <= 0 or $pagesize > env('MAX_PAGESIZE')) {
        $pagesize = env('MAX_PAGESIZE');
    }
    $sensitiveWordMongodb = new SensitiveWordMongodb();

    if (!empty($params['startTime']) && !empty($params['endTime'])) {
        $sensitiveWordMongodb = $sensitiveWordMongodb
            ->where('create_time', '>=', strtotime($params['startTime']))
            ->where('create_time', '<', strtotime($params['endTime']) + 86400);
    }

    if (!empty($params['word'])) $sensitiveWordMongodb = $sensitiveWordMongodb->where('word', 'like', "%{$params['word']}%");

    if (!empty($params['wordid'])) $sensitiveWordMongodb = $sensitiveWordMongodb->where('wordid', (int)$params['wordid']);

    //计算总页数
    $total     = $sensitiveWordMongodb->count();
    $totalPage = ceil($total / $pagesize);

    $list = $sensitiveWordMongodb
        ->select(['wordid', 'word', 'create_time', 'update_time'])
        ->orderBy('create_time', 'desc')
        ->forPage($page, $pagesize)
        ->options(['allowDiskUse' => true]) // 解决mongodb排序超出了内存限制的问题
        ->get()
        ->toArray();

    foreach ($list as &$v) {
        $v['create_time'] = date('Y-m-d H:i:s', $v['create_time']);
        $v['update_time'] = date('Y-m-d H:i:s', $v['update_time']);
    }

    return [
        'page'      => $page,
        'total'     => $total,
        'totalPage' => $totalPage,
        'list'      => $list,
    ];
}

可见,在代码中加入 options() 方法即可

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-09 11:45:16  更:2021-12-09 11:47:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:46:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码