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
相关产品推荐
相关产品推荐

