面试题答案
一键面试在insertMany
方法中,可以使用ordered: false
参数来实现此需求。
- 设置方法
db.collection('yourCollection').insertMany([
{ uniqueField: 'value1', otherField: 'data1' },
{ uniqueField: 'value2', otherField: 'data2' },
{ uniqueField: 'value1', otherField: 'data3' } // 重复文档
], { ordered: false });
- 原理
ordered
参数作用:当ordered
设置为true
(默认值)时,insertMany
操作是有序的。这意味着如果在插入过程中遇到重复文档(违反唯一索引),MongoDB会立即停止插入操作,并返回错误,后续的文档也不会被插入。- 当
ordered
设置为false
时,insertMany
操作变为无序。MongoDB会尝试插入所有文档,即使遇到重复文档(违反唯一索引),它也会继续尝试插入后续的文档。对于重复文档,MongoDB会跳过该文档的插入,并在最终的结果中返回插入失败的详细信息,而不会影响其他正常文档的插入。这样就可以避免插入重复文档且不影响其他正常文档的插入。