如何对 MongoDB 中的两个列进行分组?
要对两列进行分组,请使用 $lookup。让我们创建一个含有文档的集合 −
> db.demo132.insertOne({"CountryName1":"US","CountryName2":"UK",Value:50}); { "acknowledged" : true, "insertedId" : ObjectId("5e31950468e7f832db1a7f75") } > db.demo132.insertOne({"CountryName1":"UK","CountryName2":"AUS",Value:10}); { "acknowledged" : true, "insertedId" : ObjectId("5e31951d68e7f832db1a7f76") } > db.demo132.insertOne({"CountryName1":"AUS","CountryName2":"US",Value:40}); { "acknowledged" : true, "insertedId" : ObjectId("5e31952c68e7f832db1a7f77") }
使用 find() 方法显示集合中的所有文档 −
> db.demo132.find();
这将生成以下输出 −
{ "_id" : ObjectId("5e31950468e7f832db1a7f75"), "CountryName1" : "US", "CountryName2" : "UK", "Value" : 50 } { "_id" : ObjectId("5e31951d68e7f832db1a7f76"), "CountryName1" : "UK", "CountryName2" : "AUS", "Value" : 10 } { "_id" : ObjectId("5e31952c68e7f832db1a7f77"), "CountryName1" : "AUS", "CountryName2" : "US", "Value" : 40 }
以下是在 MongoDB 中对两列进行分组的查询 −
> db.demo132.aggregate( [ ... { ... "$lookup" : { ... "from" : "demo132", ... "localField" : "CountryName1", ... "foreignField" : "CountryName2", ... "as" : "out" ... } ... }, ... { ... "$unwind" : "$out" ... }, ... { ... "$project" : { ... "_id" : 0, ... "CountryName1" : 1, ... "total" : { "$sum" : [ "$Value", "$out.Value"]} ... } ... } ... ])
这将生成以下输出 −
{ "CountryName1" : "US", "total" : 90 } { "CountryName1" : "UK", "total" : 60 } { "CountryName1" : "AUS", "total" : 50 }
广告