Sử dụng aggregate với $unwind tách mảng, $group theo Name đếm số lượng và gom Subject vào mảng, $project tính kích thước mảng Subject.
Tạo collection với mảng details chứa Name và Subject:
> db.demo558.insertOne(
... {
... _id : 100,
... CountryCode:101,
... details: [
... { Name:"Chris", Subject:"MySQL" },
... { Name:"Chris", Subject:"MongoDB" },
... { Name:"Chris", Subject:"Java" },
... { Name:"Bob", Subject:"Python" },
... { Name:"Bob", Subject:"Java" }
... ]
... }
... )
{ "acknowledged" : true, "insertedId" : 100 }
Hiển thị tài liệu:
> db.demo558.find();
Aggregate pipeline:
> db.demo558.aggregate([
... {$unwind: "$details" },
... {$group: { _id: "$details.Name", NameCount:{$sum : 1}, Subject : {$push: "$details.Subject"}}},
... {$project: { NameCount: 1, SubjectCount : {$size: "$Subject"}}}
... ]).pretty()
Kết quả (Chris: 3 môn, 3 bản ghi; Bob: 2 môn, 2 bản ghi):
{ "_id" : "Bob", "NameCount" : 2, "SubjectCount" : 2 }
{ "_id" : "Chris", "NameCount" : 3, "SubjectCount" : 3 }