записывалось либо всё, либо ничего. Что бы работал как транзакция.
                  
                  
                  
                  
                  
                  На данный момент делаю так(из 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?
                  
                  
                
использовать транзакции
Обсуждают сегодня