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

时间:2018-10-08 07:12:30

标签: node.js mongodb mongoose

查询:

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

我使用猫鼬作为ORM

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

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

2 个答案:

答案 0 :(得分:0)

根据文档,如果您在字段上具有唯一索引(在您的情况下为name),而您尝试使用insertMany插入多个文档,则在发生错误时会出现异常:

  

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

但是,如果您设置'ordered': false,insertMany的执行不会停止,并且您将插入与<{1}}索引冲突的那些文档:

  

如果命令设置为false,则插入操作将继续执行   剩余的文件。

因此,在uniqueonly those records which violate that index would be skipped上,在name字段上设置唯一索引。

答案 1 :(得分:0)

在定义模型架构时,您可以指定哪个字段是唯一的,例如:

var userSchema = new mongoose.Schema(
{ 
  FieldName:{ 
             type: String, 
             unique:true 
            }
})
var UserModel = mongoose.Model('User',userSchema);

如果您只想添加索引,则有

schema.index({FieldName1: 1, FieldName2: 1}, {unique: true});

Or more details can be found here