MongoDB执行$addFields聚合查询成功但未更新文档是什么原因?
问题原因说明
核心原因是MongoDB的aggregate()聚合方法默认是只读操作,仅返回加工后的查询结果,不会修改原集合的持久化数据:
- 你当前的聚合语句仅配置了
$addFields阶段,仅在内存中对返回的查询结果附加了指定字段,没有任何写入原集合的逻辑,因此不会对movies集合的原有数据产生改动。 - 如果需要把新增字段的结果持久化到原集合,需要在聚合管道末尾新增
$merge阶段写入,MongoDB 4.2及以上版本支持该操作,示例代码如下:
db.movies.aggregate([ { $addFields: { totalHomework: "123312", totalQuiz: "12312" } }, { $merge: { into: "movies", on: "_id", whenMatched: "replace", whenNotMatched: "discard" } } ])
- 针对全集合批量新增固定字段的场景,使用
updateMany方法效率更高,无需走聚合流程,示例代码如下:
db.movies.updateMany( {}, { $set: { totalHomework: "123312", totalQuiz: "12312" } } )
内容的提问来源于stack exchange,提问作者Albus
相关产品推荐
相关产品推荐

