簡體   English   中英

在MongoDB中使用不同的ID更新多個文檔

[英]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();
});

但它會有更好的表現嗎?

編輯2

我嘗試實現你的建議,但沒有任何反應。

我調試了一下,似乎在第一行代碼之后沒有發生任何事情:

console.log('this is printed')
const batch = ModelName.initializeUnorderedBulkOp();
console.log('this is _not_ printed')

你知道是什么原因造成的嗎? 我沒有收到任何錯誤消息。

編輯3

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);

MongoDB NodeJS驅動程序文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM