假设我有一个集合,在字段名为
a
的字段上有唯一索引,如
.getIndexes()
的输出所示。
> db.collection.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.collection"
},
{
"v" : 1,
"unique" : true,
"key" : {
"a" : 1
},
"name" : "a_1",
"ns" : "test.collection"
}
]
以及以下文件数组:
var docs = [ { 'a': 3 }, { 'a': 4 }, { 'a': 3 } ];
您可以使用
Bulk()
API将文档批量插入到集合中,但需要使用
无序操作,这允许MongoDB在处理写操作列表中的某个写操作时出现错误时继续处理剩余的写操作。
var docs = [{a: 3}, {a: 4}, {a: 3}]
var bulk = db.collection.initializeUnorderedBulkOp();
for(var ind=0; ind<docs.length; ind++) {
bulk.insert(docs[ind]);
}
bulk.execute();
执行查询后,您将收到一个错误消息,但非重复文档将被插入到您的集合中。
在此操作之前,我们的集合为空,但在调用
bulk.execute()
之后,
db.collection.find()
将产生以下文档:
{ "_id" : ObjectId("5629c5d1e6d6a6b8e38d013c"), "a" : 3 }
{ "_id" : ObjectId("5629c5d1e6d6a6b8e38d013d"), "a" : 4 }