2016-07-22 9 views
0

私は、ユーザーが多くのクライアントのデータを登録するホテルのチェックインをシミュレートするアプリケーションを実行しています。アプリは、すべてのHQの会社を使用することを会社が出席したホテル本部の一覧を表示し、日数のことです有すべき機能の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]} 

ホテルHQは異なるクライアントo同じ会社が同じ本社に滞在した場合、または同じクライアントが複数回それを行う場合。

もちろん、私は$addToSet$pushを変更することができますが、行く結果があることを:hotel_hqための涼しいですが、ノーlodging_daysのために、私は「私はドン$sumと試みるが、

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

繰り返される 'hotel_hq'の 'lodging_days'だけを合計するようMongoに伝える方法を知っています。この作品

+0

は、私はあなたが私は1つ以上のことを行うことができ、別の$グループのパイプライン – felipsmartins

+0

@felipsmartinsが必要だと思いますか?あなたは私に例のPLZを作れますか? –

+0

はい、できます。アグリゲーション・フレームワークでは、必要なパイプライン・ステージを多数繰り返すことができます。コレクションの主旨をこのように投稿すれば、何かを試すことができます。 – felipsmartins

答えて

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"}} 
    } 
] 
) 
+0

いいえ、あなたは私に考えを与えたと思います。ありがとう。 –

関連する問題