Để xóa các giá trị trùng lặp (duplicate values) bên trong một mảng trong MongoDB, bạn sử dụng Aggregation Framework với toán tử $setUnion.
Tạo dữ liệu mẫu
Mảng InstructorSubject chứa nhiều giá trị trùng: "Java" (2 lần), "MongoDB" (2 lần).
> db.removeDuplicatesDemo.insertOne({"InstructorName":"Chris","InstructorAge":34,"InstructorSubject": ["Java","C","Java","C++","MongoDB","MySQL","MongoDB"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cb9d96c895c4fd159f80807") }
Hiển thị document:
> db.removeDuplicatesDemo.find().pretty();
Xóa trùng lặp với $setUnion
> db.removeDuplicatesDemo.aggregate([ { "$project": { "InstructorName":1, "InstructorAge" :1, "InstructorSubject" :{ "$setUnion": [ "$InstructorSubject", [] ] } }} ]).pretty();Kết quả (mảng không trùng lặp, đã sắp xếp):
Giải thích
$setUnion: [ "$InstructorSubject", [] ]- Kết hợp mảng gốc với mảng rỗng, tự động loại bỏ trùng lặp- Kết quả là một set (tập hợp) - các phần tử duy nhất, được sắp xếp theo thứ tự BSON
- Đây là operation read-only (aggregation), không sửa đổi document gốc
Để cập nhật document gốc: Sử dụng kết quả aggregation kết hợp với $merge (MongoDB 4.2+) hoặc đọc kết quả rồi update thủ công.