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

MongoDB aggregate đếm giá trị trường của tên trùng lặp tương ứng

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 }