Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Kết hợp $pull và $addToSet trong một lần cập nhật MongoDB

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 cho initializeOrderedBulkOp() (deprecated).
  • $addToSet đảm bảo không thêm trùng lặp.