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

春季-mongodb-聚合-需要'cursor'选项

闾丘德业
2023-03-14
问题内容

执行以下聚合管道:

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();
}

引发以下异常:

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"
    }
  ]
}

问题答案:

从文档。

MongoDB
3.4不建议使用不带游标选项的聚合命令,除非管道包括解释选项。使用聚合命令以内联方式返回聚合结果时,请使用默认批处理大小游标:{}指定游标选项,或在游标选项游标:{batchSize:}中指定批处理大小。

你可以通过batchSizeAggregationOptions在春季蒙戈2.x版

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

使用默认批次大小

Aggregation aggregation = newAggregation(unwind, group).withOptions(newAggregationOptions().cursor(new Document()).build());


 类似资料:
  • 问题内容: 我试图使用Spring Data MongoDB 3.6-rc4执行聚合操作。 但是在运行查询时出现以下错误 提前致谢!! 问题答案: MongoDB在3.6中更改了聚合命令的工作方式。聚合现在需要一个游标。我们改编了Spring Data MongoDB 2.1, 但没有改编以前的版本。 聚合必须通过集合的方法来调用,而不是直接调用命令。这也是我们没有回溯变更的原因。不再被调用,我们

  • 问题内容: 我有一个Java应用程序,它从主类开始(不是Spring Boot应用程序)。而且我想使用Spring retry在连接丢失时重试。据我所知,我需要在Spring应用程序的主类之上添加@EnableRetry批注,然后在我的方法之上使用@Retryable进行重试。但是我认为这在非​​Spring应用程序中将不起作用。是否可以在简单的Java应用程序(而非spring应用程序)中使用s

  • 垂直。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

  • 问题内容: 我在项目中使用Spring数据Mongodb,并在查询结果时参考以下类: 学生班: 学生成绩(dto): StudentServiceImpl类: 使用上面的代码,我能够成功检索到,但是我需要使用?进行检索。你能帮我吗? 问题答案: 将您的零件更改为下面,并添加字段到 $$ ROOT将推送整个文档。 更新:

  • 我需要筛选此查询,以便不显示值为的文档。当前,我的代码显示以下结果: 我需要一些过滤器,使消失,以便它显示我作为第一个值:。 我以前执行过以下操作:

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