2017-09-29 46 views
1

我是mongoDB中非常新的初學者。如何計算mongoDB中唯一數據的數量

我們必須示出了其中通過日期具有用戶

  1. 唯一的編號輸出數據。

  2. Android用戶和Ios用戶的數量。

這是輸入JSON數據

輸入

[{ 
    'name' : 'user1', 
    'date' : '23/09/2017', 
    'deviceType' : 'Android' 
}, 
{ 
'name' : 'user2', 
'date' : '24/09/2017', 
'deviceType' :'ios' 
}, 
{ 
'name' : 'user1', 
'date' : '23/09/2017', 
'deviceType' :'ios' 
}, 
{ 
'name' : 'user2', 
'date' : '23/09/2017', 
'deviceType' :'ios' 
}, 
{ 
'name' : 'user1', 
'date' : '24/09/2017', 
'deviceType' :'ios' 
}, 
{ 
'name' : 'user2', 
'date' : '25/09/2017', 
'deviceType' :'Android' 
} 
] 

我很困惑什麼是查詢獲取所需的數據。

和輸出端的

輸出

[{ 
    'date' : '23/09/2017', 
    'iosCount': 2, 
    'androidCount':1 
    }, 
    { 
    'date' : '24/09/2017', 
    'iosCount': 2, 
    'androidCount':0 
    }, 
    { 
    'date' : '25/09/2017', 
    'iosCount': 0, 
    'androidCount':1 
} 
] 
+1

https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users –

回答

1

這裏的一個解決方案,它是中性的設備類型。如果添加更多,則agg管道將適應新的值。

db.foo.aggregate([ 
{$group: {_id: {d:"$date",t:"$deviceType"}, n: {$sum:1}}} 
,{$group: {_id: "$_id.d", devices: {$push: {type:"$_id.t", n:"$n"}} }} 
       ]); 

{ 
"_id" : "24/09/2017", 
"devices" : [ 
    { 
     "type" : "ios", 
     "n" : 2 
    } 
] 
{ 
"_id" : "23/09/2017", 
"devices" : [ 
    { 
     "type" : "ios", 
     "n" : 2 
    }, 
    { 
     "type" : "Android", 
     "n" : 1 
    } 
] 
} 
{ 
"_id" : "25/09/2017", 
"devices" : [ 
    { 
     "type" : "Android", 
     "n" : 1 
    } 
] 
} 

如果你真的想要的是輸出你追求:

db.foo.aggregate([ 
    {$group: {_id: "$date", 
     iosCount: {$sum: {$cond: [ {$eq: [ "$deviceType","ios"]}, 1, 0 ] }}, 
     androidCount: {$sum: {$cond: [ {$eq: ["$deviceType","Android"]}, 1, 0] }} 
     }} 
       ]); 
+1

@ Buzz Moschetti,請參閱Raghav的評論。如果有這種類型的條件,然後我想只是一種數據。 [{'date':23/09/2017,totalIos:2,totalAndroid:1}] 根據您的情況打印像 [{'date':23/09/2017,totalIos:2,totalAndroid:2 }]但是我對這個輸出並不感興趣。謝謝! –

+0

好的。如果您想要按名稱進行分組,請更改爲: {$ group:{_id:{u:「$ name」,d:「$ date」}, –

1

@巴斯Moschetti

如果日期 「23/09/2017」 有一個像

[{'name' : 'user1','date' : '23/09/2017','deviceType' : 'Android'}, 
{'name' : 'user1','date' : '23/09/2017','deviceType' :'ios'}, 
{'name' : 'user1','date' : '23/09/2017','deviceType' : 'Android'}, 
{'name' : 'user2','date': '23/09/2017','deviceType':'ios'}] 
輸入數據

輸出

[{'date' : 23/09/2017, totalIos : 2, totalAndroid: 1}] 

user1有數據2個android和1個Ios數據。所以只有1個android數據會被計數。

相關問題