2016-02-03 11 views
10

Sto cercando di ottenere il conteggio delle parole chiave insieme a parentId, categioryId e llcId. mio db è

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

} 

ho provato $project con $group

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

e mi dà un risultato come

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

ma ho bisogno di dati reali in seguito anche ad esempio llcId, categoryId, keyword, total. Ho provato a visualizzare cetgoryId e parola chiave utilizzando $project ma visualizza solo _id e totale. Cosa mi manca?

+0

u può scrivere un output di esempio che è richiesto –

+0

vostra pipeline di aggregazione restituirà il numero di documenti per ogni valore di 'llcId'. E 'questo quello che vuoi? – dgiugg

risposta

12

per ottenere il conteggio keyword avresti bisogno di raggruppare i documenti dal campo keyword, quindi utilizzare l'operatore accumulatore $sum per ottenere il conteggio dei documenti. Come per gli altri valori di campo, poiché si raggruppano tutti i documenti in base al valore della parola chiave, il meglio che si può fare per ottenere gli altri campi è l'operatore $first che restituisce un valore dal primo documento per ciascun gruppo. In caso contrario, potrebbe essere necessario utilizzare l'operatore $push per restituire una matrice dei valori dei campi per ogni gruppo:

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

db.keyword.aggregate(pipeline) 
+0

come posso visualizzare $ push dati dell'operatore usando angularjs ng-repeat – SrividhyaShama

1

si raggruppa da llcId modo vi darà più di una per ogni categoryIdllcId. Se si desidera categoryId come nel risultato, è necessario scriverlo nella query del gruppo. Per esempio:

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

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