您可以使用bulkWrite
API根據您指定的邏輯執行更新,因爲它可以更好地處理此更新。
例如,下面的片段展示瞭如何去了解這個假設已經從Web服務中的數據,你需要更新遠程採集:
mongodb.connect(mongo_url, function(err, db) {
if(err) console.log(err);
else {
var mongo_remote_collection = db.collection("remote_collection_name");
/* data is from http call to an external service or ideally
place this within the service callback
*/
mongoUpsert(mongo_remote_collection, data, function() {
db.close();
})
}
})
function mongoUpsert(collection, data_array, cb) {
var ops = data_array.map(function(data) {
return {
"updateOne": {
"filter": {
"_id": data._id, // or any other filtering mechanism to identify a doc
"lastModified": { "$lt": data.lastModified }
},
"update": { "$set": data },
"upsert": true
}
};
});
collection.bulkWrite(ops, function(err, r) {
// do something with result
});
return cb(false);
}
如果從數據外部服務是巨大的,然後考慮將批量寫入服務器的數量爲500,這樣可以提供更好的性能,因爲您不會向服務器發送每個請求,只需要每500次請求一次。
批量操作MongoDB的規定每批1000的default internal limit作業等的500個文件的選擇是,你必須在批量大小一定的控制,而不是讓MongoDB的徵收默認情況下,即在較大的操作感良好> 1000文件的大小。所以對於第一種方法中的上述情況,可以一次寫入所有的數組,因爲這很小,但是500選擇是針對較大的數組。
您是否正在使用另一個集合中的值更新文檔? – styvane
不,我正在將http呼叫的值收集到外部服務。 –