我正在使用mongo-java-driver 3.0.2.
我有一个MongoCollection.aggregate(List<Bson> pipeline)用于排序和限制的方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
什么时候n很大,它失败了:
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.'
Run Code Online (Sandbox Code Playgroud)
我发现MongoDB shell提供了一个方法db.collection.aggregate(pipeline, options) …