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

Lấy các giá trị distinct của trường mảng trong MongoDB Aggregation

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