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

MongoDB:如何用聚合管道整体覆盖数组字段而非元素

解决MongoDB聚合管道更新时数组转对象的覆盖问题

当你使用聚合管道的$set直接给数组字段赋值对象时,MongoDB会默认将该对象应用到数组的每一个元素上,导致出现[ { foo: 43 }, { foo: 43 } ]这种不符合预期的结果。要一步完成数组到对象的替换,只需用$literal运算符包裹你要设置的对象,强制MongoDB将其视为字段的完整新值而非数组元素的更新内容。

正确的更新语句如下:

db.collection.update({}, [
  {
    "$set": {
      key: { "$literal": { foo: 43 } }
    }
  }
], { multi: true })

$literal的作用是返回指定的字面量值,不会对其进行任何解析或转换,这样就能彻底替换原有的数组字段为目标对象,无需先删除字段再更新。

内容的提问来源于stack exchange,提问作者Minh Nghĩa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:28:09