2016-05-16 11 views
2

私は、c#ドライバを使用してmongodbでファセット検索を行うのに苦労していた可能性があります。私は多くのチュートリアルを検証しましたが、適切な解決策を得られませんでした。 私の書類/コレクションは以下の通りです。MongoDBファセット検索

db.products.insert([ 
    {"product_name": "Product 1", "year":2014,"Manufacturer":"manufacturer1"}, 
    {"product_name": "Product 2", "year":2015,"Manufacturer":"manufacturer2"}, 
    {"product_name": "Product 3", "year":2014,"Manufacturer":"manufacturer1"}, 
    {"product_name": "Product 4", "year":2015,"Manufacturer":"manufacturer2"}, 
    {"product_name": "Product 5", "year":2014,"Manufacturer":"manufacturer1"} 
]) 

私が欲しい

年のような出力:

2014:3

2015:2

メーカー

Manufacturer1:3

メーカー1:2

上記の問題を解決するために、C#ドライバを使用してください。

答えて

0

使用MongoDBは、この2つのフェーズで$グループを使用して行うことができるシェル:あなたは多面的なクエリ内の複数のパイプラインを置くことができます

db.products.aggregate([{$group:{_id:"$year",count:{$sum:1}}}]) 

db.products.aggregate([{$group:{_id:"$Manufacturer",count:{$sum:1}}}]) 
+0

私はこれをC#を使用して1つのクエリに入れたいと思いますか? – Bhimisetty

+1

現在、サーバーにはこのサポートがないため、どのドライバーでも実行できません。ただし、サーバー3.4のトラックでこのチケットを追跡してください:https://jira.mongodb.org/browse/SERVER-23654。 –

+0

新しいC#ドライバはこれをサポートしていますが、答えを得るためには動作させる方法を理解できません – Chris

0

。しかし、あるパイプの出力を別のパイプに渡すことはできません。

$ facet内の各サブパイプラインには、入力ドキュメントとまったく同じセットが渡されます。これらのサブパイプラインは互いに完全に独立しており、それぞれが出力する文書配列は出力文書の別々のフィールドに格納されます。 1つのサブパイプラインの出力を、同じ$ファセットステージ内の異なるサブパイプラインの入力として使用することはできません。さらに集計が必要な場合は、$ facetの後にステージを追加し、目的のサブパイプライン出力のフィールド名を指定します。

希望する結果を得るには、次のクエリを試すことができます。

db.products.aggregate([ 
    { 
     $facet : { 
      year : { 
       $group : { 
        _id : '$year', 
        count : { 
         $sum : 1 
        } 
       } 
      }, 
      manufacturer : { 
       $group : { 
        _id : '$Manufacturer', 
        count : { 
         $sum : 1 
        } 
       } 
      } 
     } 
    } 
]) 
関連する問題