java - 如何使用 MongoTemplate 按顺序获取结果?
问题描述
在 mongoDB 中,我想按顺序获得结果,但是当我使用 sort 方法时,错误
com.mongodb.MongoQueryException:查询失败,错误代码 96 和错误消息“查找命令期间的执行程序错误 :: 由 :: Sort 操作使用超过最大 33554432 字节的 RAM。添加索引,或指定较小的限制。在服务器 localhost:27017 在 com.mongodb.operation.FindOperation$1.call(FindOperation.java:722) 在 com.mongodb.operation.FindOperation$1.call(FindOperation.java:711) 在 com.mongodb.operation.OperationHelper。 withConnectionSource(OperationHelper.java:471) 在 com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:415) 在 com.mongodb.operation.FindOperation.execute(FindOperation.java:711) 在 com.mongodb.operation.FindOperation .execute(FindOperation.java:83) 在 com.mongodb.Mongo$3.execute(Mongo.java:826) 在 com.mongodb.MongoIterableImpl。
发生了。
public MongoCursor<Document> getAllDateRWDByTowerId(Integer towerId) {
MongoCollection<Document> mongoCollection = mongoTemplate.getCollection("rwd");
FindIterable<Document> findIterable = collection.find().sort(Sorts.orderBy(Sorts.descending("date")));
return fi.iterator();
}
我尝试了一些不同的方法,总是发生同样的错误。我不知道为什么会发生以及如何解决这个问题。
解决方案
您应该尝试为对象的字段“日期”添加索引,如果您不添加它,mongo会从内存中的硬盘加载大量数据并导致异常。
如果你知道 index ,在某些数据库中索引是由 B+ 数据结构实现的,它是一个对硬盘友好的数据结构,使用更少的内存。
推荐阅读
- oracle - 从 Go 应用程序对 Oracle 数据库的 SQL 查询引发错误?
- mongodb - Mongo DB 配置文件不在默认位置,将其更改为 /root/mongod.conf。然后 systemctl commad 无法使用此文件
- android - 应用程序从后台删除后,服务内的广播接收器未收听
- python - Fbprophet 安装错误 - 安装失败
- arrays - 是否可以在 Rust 中声明一个不可变数组并为其元素分别赋值
- wso2 - 用于主动-主动部署的 WSO2 API Manager NFS
- pandas - 如何将 csv 文件的列值转换为 pandas 中的不同格式结构?
- javascript - 在工厂函数的console.log中的对象之前显示类名
- range - 如何设置一个不会返回 Nothing 的范围?
- jquery - 选择 .each() 函数在其上运行的元素