2016-02-03 10 views
10

Ich versuche, Schlagwort zählen zusammen mit parentId, categioryId und llcId. Mein db ist

{ 
    "_id" : ObjectId("5673f5b1e4b0822f6f0a5b89"), 
    "keyword" : "electronic content management system", 
    "llcId" : "CL1K9B", 
    "categoryId" : "CL1K8V", 
    "parentId" : "CL1K8V", 

} 

Ich versuchte $project mit $group

db.keyword.aggregate([ 
    { 
     $group: { 
      _id: "$llcId", 
      total: {$sum: 1}, 
     } 
    }, 
    { 
     $project: { 
      categoryId: 1, total: 1 
     } 
    } 
]) 

Und es gibt mir ein Ergebnis wie

{ "_id" : "CL1KJQ", "total" : 17 } 
{ "_id" : "CL1KKW", "total" : 30 } 

Aber ich auch Ist-Daten in Folge müssen z.B. llcId, categoryId, keyword, total. Ich habe versucht, cetgoryId und Schlüsselwort anzuzeigen, indem ich $project verwende, aber es zeigt nur _id und Gesamt an. Was ich vermisse?

+0

u kann eine Beispielausgabe schreiben, die Sie –

+0

Ihre Aggregations Pipeline erforderlich wird die Anzahl der Dokumente für jeden Wert von 'llcId' zurückzukehren. Ist es das was du willst? – dgiugg

Antwort

12

Um die keyword Zählung Sie durch das keyword Feld die Dokumente Gruppe benötigen würde, dann den Operator Speicher verwenden $sum die Dokumente zählen zu erhalten. Wie für die anderen Feldwerte, da Sie alle Dokumente nach dem Schlüsselwortwert gruppieren, verwenden Sie am besten den Operator, der einen Wert aus dem ersten Dokument für jede Gruppe zurückgibt. Ansonsten können Sie die $push Operator ein Array der Feldwerte für jede Gruppe verwenden müssen:

var pipeline = [ 
    { 
     "$group": { 
      "_id": "$keyword", 
      "total": { "$sum": 1 }, 
      "llcId": { "$first": "$llcId"}, 
      "categoryId": { "$first": "$categoryId"}, 
      "parentId": { "$first": "$parentId"} 
     } 
    } 
]; 

db.keyword.aggregate(pipeline) 
+0

Wie kann ich $ Push-Operator-Daten mit angularjs ng-repeat anzeigen – SrividhyaShama

1

Sie durch llcId Gruppierung sind, so wird es mehr als eine categoryId pro llcId geben. Wenn Sie in Ihrem Ergebnis categoryId möchten, müssen Sie das in Ihrer Gruppenabfrage schreiben. Zum Beispiel:

db.keyword.aggregate([ 
{ 
    $group: { 
     _id: "$llcId", 
     total: {$sum: 1}, 
     categoryId:{$max:"$categoryId"} 
    } 

}, 
{ 
    $project: { 
     categoryId: 1, total: 1 
    } 
}])