当前位置: 首页 > 面试题库 >

Spring Data MongoDB-需要'cursor'选项

罗华翰
2023-03-14
问题内容

我试图使用Spring Data MongoDB 3.6-rc4执行聚合操作。

Aggregation agg = newAggregation(
    lookup("orders", "orderId", "_id", "order") 
);
List<BasicDBObject> results = mongoOperations.aggregate(agg, "transactions", BasicDBObject.class).getMappedResults();

但是在运行查询时出现以下错误

2017-11-24 17:03:41,539 WARN  org.springframework.data.mongodb.core.MongoTemplate : Command execution of { "aggregate" : "transactions" , "pipeline" : [ { "$lookup" : { "from" : "orders" , "localField" : "orderId" , "foreignField" : "_id" , "as" : "order"}}]} failed: The 'cursor' option is required, except for aggregate with the explain argument
2017-11-24 17:03:41,574 ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Command execution failed:  Error [The 'cursor' option is required, except for aggregate with the explain argument], Command = { "aggregate" : "transactions" , "pipeline" : [ { "$lookup" : { "from" : "orders" , "localField" : "orderId" , "foreignField" : "_id" , "as" : "order"}}]}; nested exception is 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" }] with root cause
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" }
    at com.mongodb.CommandResult.getException(CommandResult.java:80) ~[mongo-java-driver-3.5.0.jar:na]
    at com.mongodb.CommandResult.throwOnError(CommandResult.java:94) ~[mongo-java-driver-3.5.0.jar:na]
    at org.springframework.data.mongodb.core.MongoTemplate.handleCommandError(MongoTemplate.java:2100) ~[spring-data-mongodb-1.10.8.RELEASE.jar:na]
    at org.springframework.data.mongodb.core.MongoTemplate.aggregate(MongoTemplate.java:1577) ~[spring-data-mongodb-1.10.8.RELEASE.jar:na]
    at org.springframework.data.mongodb.core.MongoTemplate.aggregate(MongoTemplate.java:1505) ~[spring-data-mongodb-1.10.8.RELEASE.jar:na]

提前致谢!!


问题答案:

MongoDB在3.6中更改了聚合命令的工作方式。聚合现在需要一个游标。我们改编了Spring Data MongoDB
2.1,
但没有改编以前的版本。

聚合必须通过集合的aggregate(…)方法来调用,而不是直接调用命令。这也是我们没有回溯变更的原因。executeCommand(…)不再被调用,我们也不想破坏Bugfix版本中的兼容性。

最简单的方法是使用映射的聚合管道覆盖aggregate(…)方法并调用适当的方法DBCollection.aggregate(…)



 类似资料:
  • 问题内容: 执行以下聚合管道: 引发以下异常: 我不明白这里的光标选项是什么意思。该选项应在哪里配置? 编辑 这是一个示例用户文档 问题答案: 从文档。 MongoDB 3.4不建议使用不带游标选项的聚合命令,除非管道包括解释选项。使用聚合命令以内联方式返回聚合结果时,请使用默认批处理大小游标:{}指定游标选项,或在游标选项游标:{batchSize:}中指定批处理大小。 你可以通过与在春季蒙戈2

  • 垂直。x版本:3.4.1 MongoDB服务器版本:4.0.2 运行聚合查询时,出现以下错误: 命令失败,出现错误9:“需要“cursor”选项,但在服务器localhost:27017上“aggregate with The explain”参数除外。完整响应为{“ok”:0.0,“errmsg”:“需要‘cursor’选项,但与explain参数聚合除外”,“code”:9,“codeName

  • 描述 (Description) curosr属性在音频设备中用于在元素之后播放声音。 可能的值 (Possible Values) 下表显示了cursor属性的可能值 - Sr.No. 价值和描述 1 auto 光标的形状取决于它结束的上下文区域。 例如,我在文本上,在链接上移动,等等...... 2 crosshair 十字准线或加号 3 default 一个箭头 4 pointer 指针(在

  • 我试图使用Spring数据MongoDB 3.6-rc4执行聚合操作。 但是运行查询时出现以下错误 提前感谢!!

  • 问题内容: 即使遇到以下错误,我仍在使用最新版本的mongodb 3.6 … 问题答案: 谢谢@Neil Lunn 更新猫鼬。5.0之前的Mongoose版本与MongoDB 3.6不正确匹配。MongoDB 3.6将聚合API从“ cursor optional”更改为“ cursor only”,并且较旧的mongoose版本通过尝试使用不建议使用的方法来请求数组来打破这一点。

  • 9.2.3.Cursor 查询得到的数据将按照Cursor(游标)的形式返回。通过Cursor,你可以读出得到的第一行数据并移向下一行,直到遍历完毕、返回空为止。也可以在数据集中自由移动,读取所得数据的任意一行。 一般而言,SQL的相关操作都存在触发SQLException异常的可能,这是因为数据库不在我们代码的直接控制范围内。比如数据库的存储空间用完了,或者执行过程被意外中断等等,对我们程序来说