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

Chọn tài liệu nhóm theo trường trong MongoDB

Để 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"
}