对MongoDB子字段进行排序会在Java上引发异常

时间:2014-10-02 12:18:15

标签: java mongodb sorting cursor

我在努力解决这个问题。我的代码在cursor.hasNext();

上抛出了异常
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();

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  

MongoDB只返回没有索引的字段的排序结果   排序操作中所有文档的总大小,加上一小部分   开销,小于32兆字节。   Sorted Documents

**我注意到你在orderBy.put("'field.subfield1.subfield2'", -1);中引用了双重引用,这可能是问题 - 没有可用的索引,并且它试图对整个集合进行排序。