Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序MongoDB子字段在Java上引发异常_Java_Mongodb_Sorting_Cursor - Fatal编程技术网

排序MongoDB子字段在Java上引发异常

排序MongoDB子字段在Java上引发异常,java,mongodb,sorting,cursor,Java,Mongodb,Sorting,Cursor,我努力解决这个问题。我的代码在cursor.hasNext上抛出异常 例外情况: 线程main com.mongodb.MongoException中的异常:运行程序错误:溢出排序阶段缓冲数据使用量33571128字节超出33554432字节的内部限制 当我在db控制台中使用类似的查询时,效果很好。当我添加搜索查询时,它不会抛出异常,也不会返回任何结果 代码有什么问题?我只需要带排序文档的游标。通常,错误意味着您需要减少结果集,或使用索引等来执行排序: MongoDB只会在以下情况下返回没有索引

我努力解决这个问题。我的代码在cursor.hasNext上抛出异常

例外情况: 线程main com.mongodb.MongoException中的异常:运行程序错误:溢出排序阶段缓冲数据使用量33571128字节超出33554432字节的内部限制

当我在db控制台中使用类似的查询时,效果很好。当我添加搜索查询时,它不会抛出异常,也不会返回任何结果


代码有什么问题?我只需要带排序文档的游标。

通常,错误意味着您需要减少结果集,或使用索引等来执行排序:

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();