首页 > 解决方案 > 在集合上使用 updateOne 时如何避免重复插入

问题描述

我有一个 Mongoose 数据库对象,其中包含一个包含“用户签名”的集合,其中签名必须是唯一的,即集合中不能出现重复的签名。

我因此将unique: true标志放在signature模式对象的字段上,但这仍然不能阻止它重复,但它确实适用于title 查询

标签: javascriptmongodbmongoose

解决方案


您可以修改您的filter和包含$elemMatch条件,以确保您尝试插入数组的元素不存在:

let filter = { _id: id, signatures: { $not: { signature: signature } } };

Mongo Playground 示例

因此,如果您尝试插入新signature文档,则将找到该文档,_id否则过滤器部分将不返回匹配的文档,并且update不会应用您的文档。


推荐阅读