当前位置: 首页 > news >正文

MongoDB相关使用问题

1.【报错】sort operation used more than the maximum 33554432 bytes of RAM. Add an index

MongoDB 排序超过内存限制,限制最大为100M。
解决方式:将内存排序改为磁盘排序

正常用法:数据量大了再排序会报错

@Autowired
protected MongoOperations mongoTemplate;public List<Student> getStudent(Long cid, Integer pageNo, Integer pageSize){Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC,"createTime"));Query query = Query.query(Criteria.where("cid").is(cid)).with(sort);if (pageNo != null && pageSize != null) {query.with(PageRequest.of(pageNo - 1, pageSize));}List<Student> students = mongoTemplate.find(query, Student.class).stream().limit(100).collect(Collectors.toList());
}

优化方法:采用磁盘查询

import com.iqiyi.student.entity.mongo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.*;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public class StudentMongoDao{@Autowiredprivate MongoTemplate mongoTemplateOrigin;protected Class<T> entityClass;public List<Student> getStudent(Long cid, Integer pageNo, Integer pageSize){MatchOperation matchOperation = Aggregation.match(Criteria.where("cid").is(cid));SortOperation sortOperation = Aggregation.sort(Sort.by(Sort.Direction.DESC, "createTime"));Aggregation aggregation = Aggregation.newAggregation(matchOperation, sortOperation);// 如果需要分页if (pageNo != null && pageSize != null) {Pageable pageable = PageRequest.of(pageNo - 1, pageSize);SkipOperation skipOperation = Aggregation.skip((long) pageable.getPageNumber() * pageable.getPageSize());LimitOperation limitOperation = Aggregation.limit(pageable.getPageSize());aggregation = Aggregation.newAggregation(matchOperation, sortOperation, skipOperation, limitOperation);}// 查询Aggregation finalAggregation = aggregation.withOptions(Aggregation.newAggregationOptions().allowDiskUse(true).build());List<Student> students= mongoTemplateOrigin.aggregate(finalAggregation, entityClass.getAnnotation(Document.class).collection(), entityClass).getMappedResults();return students;}
}

2.【报错】Map key xxx.xxx contains dots but no replacement was configured

原因:mongoDb有自己的内容解析方式,不支持内容中出现"."(英文点号)。
解决:将该符号替换掉即可

update 2025.1.3

http://www.lryc.cn/news/516766.html

相关文章:

  • DevSecOps自动化在安全关键型软件开发中的实践、Helix QAC Klocwork等SAST工具应用
  • 常见的显示器分辨率及其对应的像素数量
  • TDengine + MQTT :车联网时序数据库如何高效接入
  • maven的中国镜像有哪些
  • ModelScope ms-swift:轻量级模型微调框架
  • 深度解析与实践:HTTP 协议
  • Zookeeper是如何解决脑裂问题的?
  • 《Opencv》基础操作详解(5)
  • AI大模型-提示工程学习笔记2
  • AWS ELB基础知识
  • 我用Ai学Android Jetpack Compose之Text
  • Robot---奇思妙想轮足机器人
  • springcloud 介绍
  • 【STM32】I2C为什么要开漏输出和上拉电阻
  • 【从零开始入门unity游戏开发之——C#篇44】C#补充知识——var隐式类型、初始化器、匿名类型
  • Spring Boot 中 TypeExcludeFilter 的作用及使用示例
  • 解锁kafka组件安全性解决方案:打造全方位安全防线
  • 【C++数据结构——图】最小生成树(头歌实践教学平台习题) 【合集】
  • Java(1)入门基础
  • 2024.1.5总结
  • 【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
  • 在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法
  • Linux中的tty和pts概念和区别
  • 【SOC 芯片设计 DFT 学习专栏 -- RTL 中的信号名和 Netlist 中的信号名差异】
  • 机器学习经典算法——线性回归
  • MLU上使用MagicMind GFPGANv1.4 onnx加速!
  • VulnHub—potato-suncs
  • 【Flink CDC】Flink CDC的Schema Evolution表结构演变的源码分析和流程图
  • 【智能算法】改进蚁狮优化算法【matlab】
  • swagger导出json