2016-07-06 7 views
1

に重複キーを持つグループと単一のドキュメントを取得しますuser_idしかし、register_timeが異なる場合、user_idが同じ場合は、1つのレコードしか取得できません。どのように次のように私は集計を持ってMongoDBの

{ "_id" : { "country_code" : "US", "user_id" : "d2a0fe91", "os" : "Android", "channel" : "000001", "register_time" : ISODate("2016-06-30T22:47:43Z") }, "count" : 1 }  
{ "_id" : { "country_code" : "US", "user_id" : "77911591", "os" : "Android", "channel" : "000001", "register_time" : ISODate("2016-06-30T19:47:21Z") }, "count" : 1 } 
{ "_id" : { "country_code" : "IN", "user_id" : "1b72fd12", "os" : "Android", "channel" : "000001", "register_time" : ISODate("2016-06-30T19:17:28Z") }, "count" : 1 } 
{ "_id" : { "country_code" : "IN", "user_id" : "1b72fd12", "os" : "Android", "channel" : "000001", "register_time" : ISODate("2016-06-30T19:15:13Z") }, "count" : 1 } 
{ "_id" : { "country_code" : "ID", "user_id" : "045f1637", "os" : "Android", "channel" : "000001", "register_time" : ISODate("2016-06-30T19:02:19Z") }, "count" : 1 } 

答えて

1

は、ドキュメントは、同じユーザーが異なるregister_timeといくつかの文書がある場合にどのように見えるかは言及しなかったとして、いくつかのソリューションがあります。
次のように最後の$groupステージを変更し、$pushの値のregister_timeの配列を保持します。または、必要な場合は$firstの値を保持します。 register_timeでパイプラインを並べ替えるときは、$first/$lastを使用して、最初の/最後のregister_timeをユーザーの望む結果にすることができます。

"$group" : { 
     "_id" : { 
      "country_code" : "$country_code", 
      "user_id" : "$user_id", 
      "os" : "$os", 
      "channel" : "$channel", 
     }, 
     "register_times" : { 
      $push: "$register_time" 
     }, 
     "any_register_time" : { 
      $first: "$register_time" 
     },     
     "count" : { 
      "$sum" : 1 
     } 
} 
+0

私は1/7/2016-4/7/2016から選択すると、user_idが現れたかどうかを確認することができます私は1/7から4/7に記録を表示しません –

関連する問題