2017-03-20 4 views
0

私はrobmongoを初めて使用しました。Robmongo - 他の値で別の値を集計する cloumn

私は、各キーに "userId"の値と "deviceModel"の値のようないくつかの値があるというコレクションがあるとします。 各デバイスモデルにこのデバイスを持つユーザーの数を示すクエリを書く必要があります。 これは私がこれまでに得たものである:

db.device_data.aggregate([{ "$グループ":{_id: "$ data.deviceModel"、カウント:{$和を:1}}}])

問題は、これが各デバイスの集計で表示されるキーの数です。

{ 
"_id" : { "$binary" : "AN6GmE7Thi+Sd/dpLRjIilgsV/4AAAg=", "$type" : "00" }, 
"auditVersion" : "1.0", 
"currentTime" : NumberLong(1479301118381), 
"data" : { 
    "deviceDesign" : "bullhead", 
    "loginType" : "GOOGLE", 
    "source" : "SDKLoader", 
    "systemUptimeMillis" : 137652880.0, 
    "simCountryIso" : "il", 
    "networkOperatorName" : "Cellcom", 
    "hasPhonePermission" : true, 
    "deviceIdentifier" : "353627074839559", 
    "sdkVersion" : "0.7.939.2016-11-14.masterDev", 
    "brand" : "google", 
    "osVersion" : "7.0", 
    "osVersionIncremental" : "3239497", 
    "deviceModel" : "Nexus 5X", 
    "deviceSDKVersion" : 24.0, 
    "manufacturer" : "LGE", 
    "sdkShortBuildDate" : "2016-11-14", 
    "sdkFullBuildDate" : "Mon Nov 14 22:16:40 IST 2016", 
    "product" : "bullhead" 
}, 
"timezone" : "Asia/Jerusalem", 
"collectionAlias" : "DEVICE_DATA", 
"shortDate" : 17121, 
"userId" : "[email protected]b"} 

これは、1つのキーがどのようにロックされるかの例です。

+0

サンプルドキュメントを表示します。合計を1に変更します。$ sum: "$ userid" ...ドキュメント構造が正しく設定されていれば、 – notionquest

+0

になります。すべてのdeviceModelの数は0です – yairabr

+0

これをチェックしてみてくださいhttp://stackoverflow.com/questions/22932364/mongodb-group-values-by-multiple-fields –

答えて

1

deviceModelの場合、次のクエリではuserIdの個数が得られます。私は、deviceModel複数の項目について同じuserIdが存在する場合は、1回だけカウントされることを意味します。

db.collection.aggregate([ {"$group" : {_id:"$data.deviceModel", userIds:{$addToSet: "$userId"}} 
}, 
{ 
    $unwind:"$userIds" 
}, 
{ 
    $group: { _id: "$_id", userIdCount: { $sum:1} } 
}]) 

アンワインド -

は、入力ドキュメントから出力する各要素の 文書をアレイフィールドを解体。

上記の解決策では、第1のパイプライン上に形成された配列を解体する。

addToSet: -

キーによって 同じグループを共有する文書のグループ内の各文書に 式を適用した結果、すべての一意の値の配列を返します。

この関数を使用すると、配列に一意の値のみが追加されます。上記の場合、userIdが最初のパイプラインの配列に追加されます。

+0

まずは、ありがとう! unwindとaddToSetが何をするのかについて簡単に説明できますか? – yairabr