2016-05-16 143 views
2

我本來可能一直在掙扎,以獲得mongodb與c#驅動程序的方面搜索。我已經驗證了許多教程,但沒有得到合適的解決方案。 我的文件/收藏如下。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的外殼這可以通過使用$組分爲兩個階段進行:

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

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

我希望這是在使用C#的單個查詢中,可以這樣做嗎? – Bhimisetty

+1

目前無法由任何驅動程序完成,因爲服務器不具備此支持。然而,跟蹤這張票,跟蹤服務器3.4:https://jira.mongodb.org/browse/SERVER-23654。 –

+0

新的C#驅動程序支持這一點,但我不知道如何讓它工作,得到答案 – Chris

0

你可以把多條管道的多面查詢中。但請記住,您無法將一個管道的輸出傳遞到另一個管道。

$ facet中的每個子流水線都被傳遞完全相同的一組輸入文檔。這些子管道彼此完全獨立,每個輸出的文檔數組都存儲在輸出文檔的單獨字段中。 一個子流水線的輸出不能用作同一個$ facet階段內不同子流水線的輸入。如果需要進一步聚合,請在$ facet後添加其他階段,並指定所需子流水線輸出的字段名稱。

您可以嘗試以下查詢以獲得所需的結果。

db.products.aggregate([ 
    { 
     $facet : { 
      year : { 
       $group : { 
        _id : '$year', 
        count : { 
         $sum : 1 
        } 
       } 
      }, 
      manufacturer : { 
       $group : { 
        _id : '$Manufacturer', 
        count : { 
         $sum : 1 
        } 
       } 
      } 
     } 
    } 
])