欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > MongoDB相关使用问题

MongoDB相关使用问题

2025/2/25 11:24:13 来源:https://blog.csdn.net/weixin_42311968/article/details/144902910  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词