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

MongoDB能否基于数组长度设置字段?现有代码失效求解决方案

MongoDB中基于数组长度更新对应字段的正确实现方式

你的需求完全可以在MongoDB中实现,先明确你代码的问题:直接在$set里使用$size聚合操作符是无效的——普通更新模式下,$set只能赋值固定值,不能引用当前字段值进行计算。

正确实现方式(MongoDB 4.2+ 推荐)

从MongoDB 4.2版本开始,支持使用更新管道(将更新操作写成数组形式),管道模式下可以在更新阶段使用聚合表达式,完美解决你的需求:

db.user.updateOne(
  { user_name: "jon_doe" },
  [
    // 第一步:往followers数组添加新元素(自动去重)
    { $addToSet: { followers: "userthreeID" } },
    // 第二步:计算更新后的数组长度,赋值给followers_count
    { $set: { followers_count: { $size: "$followers" } } }
  ]
)

执行后就能得到预期结果:

{
  user_name:"jon_doe", 
  followers: ["useroneID", "usertwoID","userthreeID"],
  followers_count: 3
}

旧版本MongoDB(低于4.2)的替代方案

如果你的MongoDB版本低于4.2,只能分两步操作(效率略低,但能实现需求):

  1. 先添加元素到数组:
db.user.updateOne(
  { user_name: "jon_doe" },
  { $addToSet: { followers: "userthreeID" } }
)
  1. 再单独更新计数:
db.user.updateOne(
  { user_name: "jon_doe" },
  [ { $set: { followers_count: { $size: "$followers" } } } ]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:33:35