Spring – mongodb – aggregation – ‘cursor’选项是必需的

执行以下聚合管道:

public void getMostLikedItems () { UnwindOperation unwind = Aggregation.unwind("favoriteItems"); GroupOperation group = Aggregation.group("favoriteItems").count().as("likes"); SortOperation sort = Aggregation.sort(Sort.Direction.DESC, "likes"); Aggregation aggregation = newAggregation(unwind, group, sort); DBObject result = mongoTemplate.aggregate(aggregation, "users", LikedItem.class).getRawResults(); } 

抛出以下exception:

 com.mongodb.MongoCommandException: Command failed with error 9: 'The 'cursor' option is required, except for aggregate with the explain argument' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "The 'cursor' option is required, except for aggregate with the explain argument", "code" : 9, "codeName" : "FailedToParse" } 

我不明白这里的光标选项是什么意思。 应该在哪里配置此选项?

编辑这是一个示例用户文档

 { "_id": "5a6df13552f42a34dcca9aa6", "username": "user1", "password": "$2a$10$p0OXq5PPa41j1e4iPcGZHuWjoKJ983sieS/ovFI.cVX5Whwj21WYi", "favoriteItems": [ { "_id": "5a0c6b2dfd3eb67969316d6d", "name": "item1", "city": "Rabat" }, { "_id": "5a0c680afd3eb67969316d0b", "name": "item2", "city": "Rabat" } ] } 

来自文档。

除非管道包含explain选项,否则MongoDB 3.4不推荐使用不带游标选项的aggregate命令。 使用aggregate命令在线返回聚合结果时,请使用默认批处理大小游标{}指定游标选项,或在游标选项游标中指定批处理大小:{batchSize:}。

您可以在Spring Mongo 2.x版本中使用AggregationOptions传递batchSize

 Aggregation aggregation = newAggregation(unwind, group).withOptions(newAggregationOptions().cursorBatchSize(100).build()); 

使用默认批量大小

 Aggregation aggregation = newAggregation(unwind, group).withOptions(newAggregationOptions().cursor(new Document()).build()); 
 'The 'cursor' option is required, except for aggregate with the explain argument' 

当您使用不兼容的MongoDB版本和Spring-data-mongo时,Spring数据中会出现此类错误。

虽然你可以使用explain,cursor参数获得rawResults。

 Aggregation aggregation = Aggregation.newAggregation(group).withOptions( new AggregationOptions(allowDiskUse, explain, cursor)); //try with .withOptions( new AggregationOptions(true,false,new Document())); 

通过注释参数传递,您将获得rawResult中的结果,但不会在给定的outType.class中进行映射。

要获得映射结果,您必须根据MongoDb版本下载spring-data版本的正确依赖项。

编辑

我使用的是Spring版本5.0.3Spring-data-mongoDB版本2.0.3。它工作正常。