Có thể thực hiện $pull (xóa phần tử) và $addToSet (thêm phần tử nếu chưa có) cùng lúc bằng Bulk Operations.
Ví dụ: Collection pullAndAddToSetDemo có mảng StudentScores:
> db.pullAndAddToSetDemo.insertOne({ StudentScores: [78, 89, 90] });
Mục tiêu: Xóa 90, thêm 99 (nếu chưa có) trong một lần.
Sử dụng initializeOrderedBulkOp():
> var addAndPull = db.pullAndAddToSetDemo.initializeOrderedBulkOp();
> addAndPull.find({ "StudentScores": 89 }).updateOne({ $addToSet: { "StudentScores": 99 } });
> addAndPull.find({ "StudentScores": 90 }).updateOne({ $pull: { "StudentScores": 90 } });
> addAndPull.execute();
Kết quả:
BulkWriteResult({ "nMatched": 2, "nModified": 2, ... })
Kiểm tra:
> db.pullAndAddToSetDemo.find().pretty();
Kết quả: StudentScores: [78, 89, 99] (90 đã bị xóa, 99 đã thêm).
Lưu ý:
- Bulk operations thực hiện nhiều write operations trong một lần đi-đến (network round-trip).
- Từ MongoDB 3.2+, dùng
bulkWrite()thay choinitializeOrderedBulkOp()(deprecated). $addToSetđảm bảo không thêm trùng lặp.