Предположим, у меня есть коллекция с уникальным индексом на поле с именем 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 } ];
Вы можете используйте API Bulk()
, чтобы вставить объемные вставки этих документов в свою коллекцию, но вам нужно использовать unordered operations, которые позволяют MongoD B, чтобы продолжить обработку оставшихся операций записи в списке, даже если при обработке одной из операций записи произошла ошибка.
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 }