2016-02-03 11 views
10

Próbuję pobrać liczbę słów kluczowych wraz z parentId, categioryId i llcId. Moje db jest

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

} 

Próbowałem $project z $group

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

I to daje mi wynik jak

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

Ale muszę rzeczywistych danych w efekcie także przykład llcId, categoryId, keyword, total. Próbowałem wyświetlić cetgoryId i słowo kluczowe, używając $project, ale wyświetla tylko _id i całkowite. Czego mi brakuje?

+0

u można napisać, że wyjście próbki wymagane –

+0

Twój agregacji rurociągu zwróci liczbę dokumentów dla każdej wartości 'llcId'. Czy tego chcesz? – dgiugg

Odpowiedz

12

Aby uzyskać zliczania keyword trzeba by grupy dokumentów przez pole keyword, a następnie użyć operatora akumulatora $sum dostać dokumenty liczyć. Podobnie jak w przypadku innych wartości pól, ponieważ wszystkie dokumenty są grupowane według wartości słowa kluczowego, najlepiej, aby pozostałe pola były używane, aby operator zwracał wartość z pierwszego dokumentu dla każdej grupy. W przeciwnym razie może trzeba użyć operatora $push powrót tablicę wartości pól dla każdej grupy:

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

db.keyword.aggregate(pipeline) 
+0

jak mogę wyświetlić dane operatora $ push za pomocą angularjs ng-repeat – SrividhyaShama

1

Jesteś grupowanie przez llcId więc to daje więcej niż jedną categoryId za llcId. Jeśli chcesz categoryId jak w swoim wyniku, musisz napisać to w zapytaniu grupowym. Na przykład:

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

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