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

单次操作多次使用$addToSet为多数组赋值仅最后一项生效问题

问题原因与解决方案

问题根源

你在构造更新对象时重复声明了$addToSet键,但JavaScript对象不允许存在重复的键——后面的键值对会直接覆盖前面的。这就导致最终MongoDB只接收到最后一个$addToSet指令(针对firebaseInstallationIds的操作),前两个数组的更新请求被完全覆盖了。

修正方案

把所有需要执行$addToSet的字段合并到同一个$addToSet对象中,每个字段作为独立的键:

let user = {
  _id: userId,
  $set: { [`firebaseTokens.${deviceId}`]: token },
  $addToSet: {
    androidIds: deviceId,
    advertisingIds: advertisingId,
    firebaseInstallationIds: firebaseInstallationId
  }
}
let options = { new: true, setDefaultsOnInsert: true };
let userDoc = await UserModel.findByIdAndUpdate(user._id, user, options);

这样MongoDB就能同时处理三个数组的$addToSet操作,不会出现字段被覆盖的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:52:05