如何在一个键下对两个字段进行分组?

时间:2018-02-03 21:56:04

标签: mongodb

我正在玩MongoDB并有一个想法,但无法找到实现它的方法:

storescustomers,因此单个store可以将商品出售给不同的customers,并且可以多次从同一store购买商品。

我们假设我有一个名为purchases的文件,以跟踪每次购买的情况:

purchases = [{
  store_name: 'Store A',
  customer_name: 'Customer One',
  price: 89
},
{
  store_name: 'Store A',
  customer_name: 'Customer Two',
  price: 190
},
{
  store_name: 'Store A',
  customer_name: 'Customer Two',
  price: 10
}]

如果我在哪里返回按商店和客户分组的数据?我想要获取类似的东西:

{
  store_name: 'Store A',
  purchases: [{
    customer_name: 'Customer One',
    value:89
  }, {
    customer_name: 'Customer Two',
    value: 200
  }]
}

有没有办法单独使用mongo来实现这一目标?

1 个答案:

答案 0 :(得分:0)

你可以尝试这种聚合

第一个$group是按商店和客户名称分组到总和值

第二个$group是按商店名称分组并将客户和值推送到数组

db.purchases.aggregate(
[
    {$group : {
        _id : {store_name : "$store_name", customer_name : "$customer_name"},
        value : {$sum : "$price"}
        }
    },    
    {$group : {_id :"$_id.store_name", purchases : {$push : {customer_name : "$_id.customer_name", value :"$value"}}}}
]
)