Để lấy các giá trị distinct (không trùng lặp) của trường mảng, sử dụng $addToSet trong stage $group của aggregation pipeline.
Tạo collection với mảng ListOfValues:
> db.demo122.insertOne({"ListOfValues":[100,10]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2f20f1140daf4c2a3544b6") }
> db.demo122.insertOne({"ListOfValues":[240,10]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2f20f7140daf4c2a3544b7") }
Hiển thị dữ liệu (giá trị 10 xuất hiện trong cả 2 mảng):
> db.demo122.find();
Aggregation: $group với _id: 0 (nhóm tất cả), $addToSet gom toàn bộ mảng ListOfValues:
> db.demo122.aggregate([ ... { ... "$group": { ... "_id": 0, ... "ListOfValues": { "$addToSet": "$ListOfValues" } ... } ... } ... ])Kết quả: mảng chứa 2 mảng con distinct (giữ nguyên cấu trúc mảng gốc của từng doc):
Lưu ý: $addToSet ở đây giữ nguyên mảng con làm giá trị distinct. Nếu muốn gộp phẳng (flatten) thành mảng giá trị distinct đơn lẻ, cần thêm $unwind trước $group.