完成对group和sum字段的MongoDB查询

时间:2016-07-22 00:26:55

标签: mongodb

我正在做一个模拟酒店登记的应用程序,用户在其中注册了大量客户的数据。在这些数据中,我有这个:

{
  "client_name" : "John Doe",
  "client_id" : "xxxxxxxx"
  ...
  "company" : "CocaCola",
  "hotel_hq" : "New York",
  "lodging_days" : 5,
  ...
}

该应用程序应具备的功能之一是显示公司所在的酒店总部列表,以及公司在每个总部使用的天数。

所以,我需要一个返回给我的查询:

{"company" : "CocaCola", "hotel_hq" : ["New York", "California", "Orlando"], "lodging_days" : [5, 10, 8]}

我带血汗流泪,这个问题:

db.clients.aggregate(
{
  $group: {
    _id: '$company',
    hotel_hq : {$push:'$hotel_hq'},
    lodging_days : {$push:'$lodging_days' }
  }
})

这是我最接近的,因为这让我回答:

{"_id" : "CocaCola", "hotel_hq": ["New York", "New York", "California", "Orlando", "Orlando", "Orlando", "Orlando"], "lodging_days" : [5, 8, 10, 8, 9, 2, 3]}

酒店总部有时会重复,因为同一家公司的不同客户住在同一个总部,或者同一个客户不止一次。

显然,我可以将$push更改为$addToSet,但结果将是:

{"_id" : "CocaCola", "hotel_hq": ["New York", "California", "Orlando"], "lodging_days" : [5, 8, 10, 9, 2, 3]}

对于hotel_hq来说这很酷,但是对于住宿日没有,我尝试使用$sum,但我不知道怎么说Mongo只能算出重复'hotel_hq'的'accommodation_days'。

1 个答案:

答案 0 :(得分:0)

希望这有效..

db.test3.aggregate(
[
    {
        $group:{_id:{company:"$company",hotel_hq:"$hotel_hq"},
        "Days":{$sum:"$lodging_days"}}
    },
    {
        $group:{_id:"$company",hotel_hq:{$push:"$_id.hotel_hq"},
        Days:{$push:"$Days"}}
    }
]
)