排序MongoDB子字段在Java上引发异常
我努力解决这个问题。我的代码在cursor.hasNext上抛出异常 例外情况: 线程main com.mongodb.MongoException中的异常:运行程序错误:溢出排序阶段缓冲数据使用量33571128字节超出33554432字节的内部限制 当我在db控制台中使用类似的查询时,效果很好。当我添加搜索查询时,它不会抛出异常,也不会返回任何结果排序MongoDB子字段在Java上引发异常,java,mongodb,sorting,cursor,Java,Mongodb,Sorting,Cursor,我努力解决这个问题。我的代码在cursor.hasNext上抛出异常 例外情况: 线程main com.mongodb.MongoException中的异常:运行程序错误:溢出排序阶段缓冲数据使用量33571128字节超出33554432字节的内部限制 当我在db控制台中使用类似的查询时,效果很好。当我添加搜索查询时,它不会抛出异常,也不会返回任何结果 代码有什么问题?我只需要带排序文档的游标。通常,错误意味着您需要减少结果集,或使用索引等来执行排序: MongoDB只会在以下情况下返回没有索引
代码有什么问题?我只需要带排序文档的游标。通常,错误意味着您需要减少结果集,或使用索引等来执行排序: MongoDB只会在以下情况下返回没有索引的字段的排序结果: 排序操作中所有文档的组合大小,再加上 开销小于32兆字节。
**我注意到您在中双重引用了排序:orderBy.put'field.subfield1.subfield2',-1;这可能就是问题所在——没有可用的索引,它试图对整个集合进行排序。为字段编制索引。但真正向您展示实际的文档结构。如果这是一个任何形式的数组,那么它不会做你认为它可能做的事情。这是问题吗?我所需要的只是通过游标按特定顺序得到结果。如果我需要大量收藏,真的不可能吗?不过我可以通过控制台来实现。引用并没有真正的区别。如果它在控制台中工作,那么同样的查询将通过驱动程序工作。
MongoClient mongoClient = new MongoClient();
DB db = mongoClient.getDB("DBname");
DBCollection coll = db.getCollection("ColName");
DBObject orderBy = new BasicDBObject();
orderBy.put("'field.subfield1.subfield2'", -1);
DBCursor cursor = coll.find().sort(orderBy);
...
cursor.hasNext();