2017-05-11 4 views
-1

私は「team.name」でフィルタリングし、状態が何であるかを知りたいとサンプル結果、以下のようMongoDBでどのような集計を行うべきですか?

{ "name" : "A", "Active" : 2, "Unknown" : 1}, 
{ "name" : "B", "Deactive" : 3}, 
{ "name" : "C", "Unknown" : 3"} 

をそれぞれの状態を数えるサンプル

{ "_id" : "...." , "team" : [ {"name" : "A", "state" : "Active"} , {"name" : "B", "state" : "Deactive", {"name" : "C", "state" : "Unknown"} } ]}, 
{ "_id" : "...." , "team" : [ {"name" : "A", "state" : "Unknown"} , {"name" : "B", "state" : "Deactive", {"name" : "C", "state" : "Unknown"} } ]}, 
{ "_id" : "...." , "team" : [ {"name" : "A", "state" : "Active"} , {"name" : "B", "state" : "Deactive", {"name" : "C", "state" : "Unknown"} } ]} 

以下のように私は、データを格納するコレクションを持っているされていますMongoDBの集合関数のみをコードなしで使用することは可能ですか?

+2

は、あなたがイエス/ノーの答えを期待していませんか? –

答えて

2

コードなしでMongoDBの集約関数のみを使用できますか?

はい

TL;あなたのサンプルのためのDRアンワインドとグループ

db.getCollection('foo').aggregate([ 
    {$unwind:"$team"}, 
    { 
     $group: { 
      _id: "$team.name", 
      "Active": {$sum: {$cond:[{$eq:["$team.state","Active"]},1,0]}}, 
      "Deactive": {$sum: {$cond:[{$eq:["$team.state","Deactive"]},1,0]}}, 
      "Unknown": {$sum: {$cond:[{$eq:["$team.state","Unknown"]},1,0]}} 
     } 
    }, 
    {$project: {_id:0, name:"$_id", Active:1, Deactive:1, Unknown:1}}, 
    {$sort: {name:1}} 
]) 

出力:

[ 
    { "name" : "A", "Active" : 2, "Deactive" : 0, "Unknown" : 1 }, 
    { "name" : "B", "Active" : 0, "Deactive" : 3, "Unknown" : 0 }, 
    { "name" : "C", "Active" : 0, "Deactive" : 0, "Unknown" : 3 } 
] 
+1

多くのSergeyに感謝します。 –

+0

@taohiko u r welcomeようこそ。次回は、あなたが試したコードを投稿してください - それはより多くの人々があなたを助けることを奨励し、あなたは解決策だけでなく、あなたのアプローチに間違っていた説明を得るでしょう –

関連する問題