I am using mongo-java-driver 3.0.2 .
I have a method that uses MongoCollection.aggregate(List<Bson> pipeline) to sort and restrict:
private static MongoIterable<Document> selectTop(int n) { BasicDBObject sortFields = new BasicDBObject("score", -1); BasicDBObject sort = new BasicDBObject("$sort", sortFields); BasicDBObject limit = new BasicDBObject("$limit", n); List<BasicDBObject> pipeline = new ArrayList<>(); pipeline.add(sort); pipeline.add(limit); return playersCollection.aggregate(pipeline); }
When n large, it fails:
com.mongodb.MongoCommandException: Command failed with error 16820: 'exception: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in.'
I found that the MongoDB shell provides the db.collection.aggregate(pipeline, options) ( link ) method, where options may contain allowDiskUse >.
I cannot find the equivalent of this in the Java API . Although the AggregationOptions class exists, the MongoCollection class MongoCollection not provide an aggregate(List<Bson> pipeline, AggregationOptions options) method aggregate(List<Bson> pipeline, AggregationOptions options) .
java mongodb
romanws
source share