Phương thức distinct() có thể dùng để lấy mảng các giá trị duy nhất của một trường (thường là _id) từ các tài liệu thoả mãn bộ lọc. Cách này hiệu quả hơn find() + map khi chỉ cần danh sách ID.
Dữ liệu mẫu
> db.demo151.insertOne({"ListOfNames":["Chris","David","Mike"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3513b6fdf09dd6d08539da") }
> db.demo151.insertOne({"ListOfNames":["Mike","Bob"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3513c4fdf09dd6d08539db") }
> db.demo151.insertOne({"ListOfNames":["John","David","Chris"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3513dcfdf09dd6d08539dc") }
Xem dữ liệu
> db.demo151.find();
{ "_id" : ObjectId("5e3513b6fdf09dd6d08539da"), "ListOfNames" : [ "Chris", "David", "Mike" ] }
{ "_id" : ObjectId("5e3513c4fdf09dd6d08539db"), "ListOfNames" : [ "Mike", "Bob" ] }
{ "_id" : ObjectId("5e3513dcfdf09dd6d08539dc"), "ListOfNames" : [ "John", "David", "Chris" ] }
Lấy _id của các tài liệu chứa "Mike" trong ListOfNames
> db.demo151.distinct('_id', {'ListOfNames' : "Mike"});
Kết quả
[ ObjectId("5e3513b6fdf09dd6d08539da"), ObjectId("5e3513c4fdf09dd6d08539db") ]
Lưu ý: Cú pháp distinct(field, query) – tham số thứ 2 là bộ lọc. Kết quả là mảng các giá trị distinct của field (ở đây _id) từ các tài liệu khớp query. Rất tiện cho việc lấy danh sách ID để dùng trong $in sau này.