2016-05-16 10 views
2

Ich könnte in einem Kampf gewesen sein, dass eine facet Suche im mongodb mit C# Treiber abzuleiten. Ich habe viele Tutorials verifiziert, aber keine passende Lösung gefunden. Mein Dokument/Sammlung wird wie folgt sein.MongoDB facettierte Suche

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"} 
]) 

Ich möchte die Ausgabe wie

Jahr:

2014: 3

2015: 2

Hersteller

Hersteller1: 3

Hersteller1: 2

Könnte mir bitte jemand helfen, das obige Problem mit C# -Treiber zu lösen.

Antwort

0

Mit mongodb Shell dies mit $ Gruppe in zwei Phasen durchgeführt werden kann:

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

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

Ich möchte dies in einer einzigen Abfrage mit C#, kann es getan werden? – Bhimisetty

+1

Es kann derzeit von keinem Treiber ausgeführt werden, da der Server diese Unterstützung nicht unterstützt. Behalten Sie jedoch dieses Ticket auf dem richtigen Weg für Server 3.4 im Auge: https://jira.mongodb.org/browse/SERVER-23654. –

+0

Der neue C# -Treiber unterstützt dies, aber ich kann nicht herausfinden, wie man es zur Arbeit bringt, um die Antwort zu bekommen – Chris

0

Sie mehrere Pipelines in einer facettierten Abfrage setzen können. Aber denken Sie daran, dass Sie die Ausgabe einer Pipe nicht an eine andere Pipe weitergeben können.

Jede Subpipeline innerhalb von $ facet wird genau mit den gleichen Eingabedokumenten übergeben. Diese Sub-Pipelines sind vollständig unabhängig voneinander und das von jedem ausgegebene Dokument-Array wird in separaten Feldern im Ausgabedokument gespeichert. Die Ausgabe einer Unterpipeline kann nicht als Eingabe für eine andere Unterpipeline innerhalb derselben $ -Facet-Stufe verwendet werden. Wenn weitere Aggregationen erforderlich sind, fügen Sie nach $ facet weitere Stufen hinzu und geben Sie den Feldnamen,, der gewünschten Sub-Pipeline-Ausgabe an.

Sie können die folgende Abfrage ausprobieren, um das gewünschte Ergebnis zu erhalten.

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