Phương thức distinct() có thể truy xuất giá trị duy nhất của trường lồng sâu (deeply nested) bằng dot notation, trả về mảng phẳng các giá trị – rất tiện cho dropdown, autocomplete.
Dữ liệu mẫu
> db.demo166.insertOne({"details" : { "UserName" : "Chris", "UserAge":29, "PhoneDetails" : { "PhoneNumber" : "98646463533" } } });
{ "acknowledged" : true, "insertedId" : ObjectId("5e368b159e4f06af551997cf") }
> db.demo166.insertOne({"details" : { "UserName" : "David", "UserAge":21, "PhoneDetails" : { "PhoneNumber" : "87664534654" } } });
{ "acknowledged" : true, "insertedId" : ObjectId("5e368b159e4f06af551997d0") }
Xem dữ liệu
> db.demo166.find();
{ "_id" : ObjectId("5e368b159e4f06af551997cf"), "details" : { "UserName" : "Chris", "UserAge" : 29, "PhoneDetails" : { "PhoneNumber" : "98646463533" } } }
{ "_id" : ObjectId("5e368b159e4f06af551997d0"), "details" : { "UserName" : "David", "UserAge" : 21, "PhoneDetails" : { "PhoneNumber" : "87664534654" } } }
Lấy distinct PhoneNumber
> db.demo166.distinct("details.PhoneDetails.PhoneNumber");
Kết quả
[ "98646463533", "87664534654" ]
Ứng dụng thực tế: Lấy danh sách quốc gia, tag, category duy nhất từ trường lồng nhau để hiển thị filter UI. Có thể thêm query filter: distinct("details.PhoneDetails.PhoneNumber", {"details.UserAge": {$gt: 25}}).