Để nhóm theo trường khác, hãy sử dụng $ group cùng với $ project. Trước tiên, hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -
> db.demo374.insertOne( ... { ... ... "Name" : "Chris", ... "HobbyDetails" : [ ... "Reading Book", ... "Playing Football" ... ], ... "CountryName" : "US" ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e5a04402ae06a1609a00b04") } > db.demo374.insertOne( ... { ... ... "Name" : "Chris", ... "HobbyDetails" : [ ... "Browsing Internet", ... "Playing Football" ... ], ... "CountryName" : "US" ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e5a04402ae06a1609a00b05") }
Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -
> db.demo374.find();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e5a04402ae06a1609a00b04"), "Name" : "Chris", "HobbyDetails" : [ "Reading Book", "Playing Football" ], "CountryName" : "US" } { "_id" : ObjectId("5e5a04402ae06a1609a00b05"), "Name" : "Chris", "HobbyDetails" : [ "Browsing Internet", "Playing Football" ], "CountryName" : "US" }
Sau đây là truy vấn để tìm nhóm giá trị theo trường khác trong MongoDB -
> db.demo374.aggregate([ ... {$match : { "CountryName" : "US"}}, ... {$group : {"_id" : "$Name", "HobbyDetails" : {$addToSet : "$HobbyDetails"}}}, ... {$project : {"_id" : 0, "Name" : "$_id", "HobbyDetails" : {$reduce : {input : "$HobbyDetails", initialValue : [], in: { $concatArrays : ["$$value", "$$this"] }}}}} ... ]).pretty()
Điều này sẽ tạo ra kết quả sau -
{ "Name" : "Chris", "HobbyDetails" : [ "Browsing Internet", "Playing Football", "Reading Book", "Playing Football" ] }