次のコマンドでquery
は、1 つのドキュメントのみに一致します (bulkWrite()
デフォルトで順序付けられていることに注意してください)。
final BulkWriteResult res = db.getCollection("mycol").bulkWrite(Arrays.asList(
new UpdateOneModel<>(query,
new Document("$addToSet", new Document("some_things", things))),
new UpdateOneModel<>(query,
new Document("$pull", new Document("some_things", otherthings)))));
... 最初の更新が成功し、2 番目の更新が失敗した場合 (通常の状況では不可能なはずです)、最初の更新は引き続きドキュメントに適用されることを理解しています。つまり、一括書き込みは厳密にはアトミックではありません。ただし、両方のクエリが成功すると仮定すると、操作はアトミックですか? たとえば、他の書き込みは 2 つの操作の間にインターリーブできますか?