单次操作多次使用$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
相关产品推荐
相关产品推荐

