如何避免在 MongoDB 中使用 db.insertMany() 在集合中插入重复值?

Sus*_*t K 2 mongoose mongodb node.js

询问:

db.getCollection('parents').insertMany(
    [{
        'name': 'Mark',
        'children': 'No Childs'
    },{
        'name': 'Carl',
        'children': '2'
    }], {
      'ordered': true,
    }
)
Run Code Online (Sandbox Code Playgroud)

我使用 mongoose 作为 ORM

有人可以建议我们是否有像 unique: true 这样的选项吗?我希望检查内容而不是 _id,因为它永远不会重复

注意:我尝试使用 upsert: true 进行 findOneAndUpdate,但这里我必须同时插入多个文档

Akr*_*ion 5

根据文档,如果您在字段上有唯一索引(在您的情况下name),并且您尝试使用insertMany插入多个文档,那么在发生错误时您将收到异常:

为属于唯一索引的任何键(例如 _id)插入重复值会引发异常。

但是,如果您设置'ordered': falseinsertMany 的执行将不会停止,并且您将拥有与插入的索引unique冲突的文档:

如果命令为 false,则插入操作将继续处理任何剩余文档。

因此,在字段上设置一个唯一索引name,当您insertMany 只执行那些违反该索引的记录时,将跳过这些记录