Để chọn tài liệu và nhóm theo trường, hãy sử dụng $group kết hợp với $project trong aggregate.
Tạo collection:
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"US"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca368ef4dcbee04fbbc0e") }
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"UK"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca36bef4dcbee04fbbc0f") }
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"AUS"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca370ef4dcbee04fbbc10") }
Hiển thị tất cả:
> db.demo540.find();
Kết quả (3 bản ghi cùng id và Name, khác CountryName):
{ "_id" : ObjectId("5e8ca368ef4dcbee04fbbc0e"), "id" : 1, "Name" : "Chris", "CountryName" : "US" }
{ "_id" : ObjectId("5e8ca36bef4dcbee04fbbc0f"), "id" : 1, "Name" : "Chris", "CountryName" : "UK" }
{ "_id" : ObjectId("5e8ca370ef4dcbee04fbbc10"), "id" : 1, "Name" : "Chris", "CountryName" : "AUS" }
Pipeline aggregate: nhóm theo id và Name, đẩy CountryName vào mảng details, sau đó format lại output:
> var query= [
... {
... "$group": {
... "_id": {
... "id": "$id",
... "Name": "$Name"
... },
... "details": {
... "$push": {
... "CountryName": "$CountryName"
... }
... }
... }
... },
... {
... "$project": {
... "_id": "$_id.id",
... "Name": "$_id.Name",
... "details": 1
... }
... }
... ];
> db.demo540.aggregate(query).pretty();
Kết quả (1 tài liệu gom nhóm 3 quốc gia):
{
"details" : [
{ "Name" : "Chris", "CountryName" : "US" },
{ "Name" : "Chris", "CountryName" : "UK" },
{ "Name" : "Chris", "CountryName" : "AUS" }
],
"_id" : 1,
"Name" : "Chris"
}