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

Đếm các mục duy nhất trong trường mảng trên tất cả tài liệu MongoDB

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