[英]Updating multiple documents with different ids in MongoDB
現在我正在使用更新多個子文檔
var positions = [
{ id: '1', position: { x: 0, y: 0 } },
...
];
positions.forEach(element => {
Model.findOneAndUpdate({ _id: modelId, 'elements._id': element.id }, {
$set: {
'elements.$.position': element.position
}
});
});
但是只能在一次通話中調用數據庫嗎?
例如,我可以做到
Model.findById(modelId).then(model => {
positions.forEach(element => {
const doc = model.elements.id(element.id);
doc.position = element.position;
});
model.save();
});
但它會有更好的表現嗎?
我嘗試實現你的建議,但沒有任何反應。
我調試了一下,似乎在第一行代碼之后沒有發生任何事情:
console.log('this is printed')
const batch = ModelName.initializeUnorderedBulkOp();
console.log('this is _not_ printed')
你知道是什么原因造成的嗎? 我沒有收到任何錯誤消息。
var batch = ModelName.initializeUnorderedBulkOp();
positions.forEach(element => {
batch.findOneAndUpdate({ _id: modelId, 'elements._id': element.id }, {
$set: {
'elements.$.position': element.position
}
});
});
batch.execute().then(() => {
console.log('success');
}).catch(err => {
console.log(err);
});
當然,您可以進行無序批量操作。 這只會對數據庫服務器進行一次調用。 是的,這比前者有顯着的性能改進。
var batch = Model.initializeUnorderedBulkOp();
var positions = [
{ nodeId: '1', position: { x: 0, y: 0 } },
{ nodeId: '2', position: { x: 3, y: 4 } },
];
positions.forEach(el => {
batch.findOneAndUpdate({<YOUR STUFF>});
});
batch.execute().then(console.log);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.