записывалось либо всё, либо ничего. Что бы работал как транзакция.
На данный момент делаю так(из node.js через драйвер mongo):
let docsForUpsert = [];
for (let j in queueForArch){
docsForUpsert.push({
"updateOne": {
"filter": {
"_id": queueForArch[j]._id
},
"update": {
$set: queueForArch[j],
$setOnInsert: {
"archiveDate": new Date()
}
},
"upsert": true
}
});
if (docsForUpsert.length === 1000) {
await db.collection(archiveColl).bulkWrite(docsForUpsert);
docsForUpsert = [];
}
}
При возникновении ошибки на одном из документов(на нём дублированное значение поля, на котором висит уник.индекс) происходит ошибка в этом операторе, но некоторые заинсерченные записи остаются в БД. Т.е. транзакционность не обеспечивается. Как обеспечить транзакционность на уровне одного вызова bulkWrite?
использовать транзакции
Обсуждают сегодня