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

Scala操作MongoDB 4.4.4时计算字段更新文档失效问题求助

解决Scala中MongoDB聚合式更新表达式不生效的问题

你遇到的问题核心是:Scala代码中使用普通Document做更新时,MongoDB不会解析其中的聚合操作符,而Mongo控制台里用数组形式的**更新管道(Update Pipeline)**才能正确执行聚合计算。

问题原因

你之前的代码传入的是单个Document类型的更新指令,MongoDB会将其当作传统的键值对更新处理,直接把包含$toLong、$toDate的嵌套Document存入created_at字段,不会执行表达式计算。而控制台里的[]是告诉MongoDB使用聚合更新管道,它会解析管道内的聚合操作符并执行计算。

解决方案

将更新指令包装成一个List[Document](对应MongoDB的数组形式管道),传入updateMany方法即可:

import org.bson.Document

// 构建聚合更新管道
val updatePipeline = List(
  new Document(
    "$set",
    new Document(
      "created_at",
      new Document("$toLong", new Document("$toDate", "$_id"))
    )
  )
)

// 执行批量更新
db.getCollection(CollectionName)
  .updateMany(
    new Document(), // 匹配所有文档
    updatePipeline
  )

验证效果

执行上述代码后,MongoDB会解析$toDate和$toLong操作符,将_id(ObjectId)转换为对应的时间戳,正确赋值给created_at字段,和你在控制台执行的效果一致。

内容的提问来源于stack exchange,提问作者Igor Fedorov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:50:47