假設我有一個要插入的文檔列表。具有唯一索引的MongoDB批插入
中的文檔結構如下
{
url: string,
visited: boolean
}
我對url
鍵唯一索引。
當我插入文檔時,如果找到1個重複項,則整個操作會中止。
有沒有辦法讓我仍然可以使用批量插入,它會插入所有不重複的文件?
作爲一種解決方法,我必須逐個插入文檔,並且擔心插入開銷會對性能造成影響。
假設我有一個要插入的文檔列表。具有唯一索引的MongoDB批插入
中的文檔結構如下
{
url: string,
visited: boolean
}
我對url
鍵唯一索引。
當我插入文檔時,如果找到1個重複項,則整個操作會中止。
有沒有辦法讓我仍然可以使用批量插入,它會插入所有不重複的文件?
作爲一種解決方法,我必須逐個插入文檔,並且擔心插入開銷會對性能造成影響。
假設我有一個由.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"
}
]
輸出命名a
作爲秀場唯一索引的收集和文檔下面的數組:
var docs = [ { 'a': 3 }, { 'a': 4 }, { 'a': 3 } ];
你可以使用Bulk()
API將這些文檔的批量插入到您的收藏中,但您需要使用允許MongoD的unordered operations 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 }
不得不看看使用upsert?