You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB 3.6.2聚合查询转BSONDocument报错:需指定cursor选项

解决MongoDB 3.6.2中使用BSONDocument执行聚合查询时的cursor选项错误

这个问题是MongoDB版本升级带来的规则变化导致的:从3.6版本开始,除了带explain参数的聚合操作外,所有聚合命令都必须显式指定cursor选项,而3.2.7版本没有这个强制要求。

你在命令行和Robomongo里能正常运行查询,是因为这些工具会自动帮你补充默认的cursor配置;但你手动构造BSONDocument的时候,完全按照旧版本的写法来,漏掉了这个必填项,所以才会触发这个报错。

只需要在你的commandDoc里添加一行"cursor" -> BSONDocument()就可以解决问题,修改后的完整代码如下:

val commandDoc = BSONDocument(
  "aggregate" -> "portfolio", // 聚合操作的目标集合
  "pipeline" -> BSONArray(
    BSONDocument("$match" -> BSONDocument("id" -> portfolioId)),
    BSONDocument(
      "$project" -> BSONDocument(
        "medias" -> BSONDocument(
          "$filter" -> BSONDocument(
            "input" -> "$medias",
            "as" -> "category",
            "cond" -> BSONDocument(
              "$eq" -> Json.arr("$$category.categoryId", categoryId)
            )
          )
        )
      )
    )
  ),
  "cursor" -> BSONDocument() // 添加默认游标配置,满足3.6+的强制要求
)

如果你需要自定义游标的行为(比如指定每次批量返回的文档数量),也可以给cursor设置具体参数,比如:

"cursor" -> BSONDocument("batchSize" -> 100)

这样修改后,你的聚合查询就能在MongoDB 3.6.2版本正常运行了。

内容的提问来源于stack exchange,提问作者Manoj S Ramaswamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:17:51