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

Trả về mảng các số điện thoại (trường lồng sâu) với distinct() trong MongoDB

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}}).