Để đếm các mục duy nhất trong các trường dựa trên mảng, hãy sử dụng $group kết hợp với aggregate(). Đầu tiên, hãy tạo một collection với các tài liệu mẫu:
> db.demo493.insertOne({"SubjectName":["MySQL","MongoDB","Java"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e849f97b0f3fa88e22790c4") }
> db.demo493.insertOne({"SubjectName":["C++","MongoDB","C"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e849fa4b0f3fa88e22790c5") }
> db.demo493.insertOne({"SubjectName":["MySQL","MongoDB","C"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e849fb2b0f3fa88e22790c6") }
Hiển thị tất cả tài liệu từ collection bằng phương thức find():
> db.demo493.find();
Kết quả trả về:
{ "_id" : ObjectId("5e849f97b0f3fa88e22790c4"), "SubjectName" : [ "MySQL", "MongoDB", "Java" ] }
{ "_id" : ObjectId("5e849fa4b0f3fa88e22790c5"), "SubjectName" : [ "C++", "MongoDB", "C" ] }
{ "_id" : ObjectId("5e849fb2b0f3fa88e22790c6"), "SubjectName" : [ "MySQL", "MongoDB", "C" ] }
Truy vấn sau đếm các mục duy nhất trong các trường mảng trên tất cả tài liệu:
> db.demo493.aggregate([
{ $unwind: "$SubjectName" },
{ $group: { _id: "$SubjectName", Frequency: { $sum : 1 } } }
]);
Kết quả sẽ hiển thị tần suất xuất hiện của từng môn học:
{ "_id" : "C++", "Frequency" : 1 }
{ "_id" : "C", "Frequency" : 2 }
{ "_id" : "Java", "Frequency" : 1 }
{ "_id" : "MySQL", "Frequency" : 2 }
{ "_id" : "MongoDB", "Frequency" : 3 }
Giải thích: Toán tử $unwind phân tách mảng thành các tài liệu riêng biệt cho từng phần tử, sau đó $group nhóm theo tên môn học và đếm số lần xuất hiện bằng $sum: 1.