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

Cách xóa giá trị trùng lặp trong mảng MongoDB?

Để 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.