首页 > 解决方案 > 如何使用 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();
}

我尝试了一些不同的方法,总是发生同样的错误。我不知道为什么会发生以及如何解决这个问题。

标签: javamongodbspring-boot

解决方案


您应该尝试为对象的字段“日期”添加索引,如果您不添加它,mongo会从内存中的硬盘加载大量数据并导致异常。

如果你知道 index ,在某些数据库中索引是由 B+ 数据结构实现的,它是一个对硬盘友好的数据结构,使用更少的内存。


推荐阅读