【发布时间】:2019-08-01 20:31:38
【问题描述】:
我在猫鼬的 findOneAndUpdate 中遇到问题。 情况是我通过查找来更新文档。 查询如下:
UserModel.findOneAndUpdate({
individualId: 'some id'
}, {
$push: {
supporterOf: 'some string'
}
})
'supporterOf' 是 UserModel 的 ref,它的类型是 'ObjectId'。
我在这里面临的问题是,“某些字符串”在文档中的“supporterOf”下被推送了两次。
谁能告诉我如何在文档中推送一个数组元素?
【问题讨论】:
-
您的查询看起来不错,我相信您的问题出在代码的其他地方。你能发布你的端点的其余部分吗?您是否尝试过手动获取文档、将字符串推送到数组并使用 .save() 保存?
-
不,我没有尝试过手动获取然后更新 .save() 因为我想一次性完成交易。我想查找并更新结果,它更新但插入重复项。我也调试了代码,我从端点接收单个值。你能告诉我,当我(手动获取和推送)和我(使用 findOneAndUpdate)时,交易时间会相同吗?
-
它会慢一些,但除非您计划同时更新许多(例如 1000 多个)文档,或者硬件限制非常低,否则您应该可以忽略这些差异。不过,我建议您尝试进一步调试此问题,因为我相信可能存在潜在问题,可能会导致进一步的问题。因此,您能否发布您的问题的概念证明?
-
是的@BenSower,你是对的,它会更慢,但相信我现在正在发生 findOneAndUpdate 在推送项目中插入重复条目。为了再次出现此问题,请创建一个包含空数组的模式。然后运行 findOneAndUpdate 并像上面的帖子一样推送项目,你会遇到重复条目的问题。
-
我创建了这个要点gist.github.com/BenSower/9800a21c2ae4202d81a46fc64bc55b9e,它调用 findOneAndUpdate 两次,每次只推送一个字符串。你用的是什么猫鼬版本?
标签: arrays node.js mongodb mongoose array-push