2016-05-11 3 views
0

Ich bin mit dem Restaurant Probendatensatzes zu arbeiten, wo die Daten, wie ist:Wie kann ich ein Zählfeld neben der aggregierten Gruppe nach Feld in MongoDB erhalten?

{ 
    "_id" : ObjectId("5728c18870b1f4f542bd7c52"), 
    "borough" : "Brooklyn", 
    "cuisine" : "American", 
    "name" : "Riviera Caterer", 
    "restaurant_id" : "40356018" 
} 

{ 
    "_id" : ObjectId("5728c18870b1f4f542bd7c55"), 
    "borough" : "Queens", 
    "cuisine" : "Jewish/Kosher", 
    "name" : "Tov Kosher Kitchen", 
    "restaurant_id" : "40356068" 
} 

(übersprungen einige Felder, die nicht benötigt wurden)

Was ich im Grunde tun möchte ist Gruppe die Daten nebeneinander gesetzt durch Küche, mit den Grafen und Küche, ähnlich wie:

select count(1) as Count, cuisine 
from restaurants 
group by cuisine 

ergäbe

Count | Cuisine 
-------------- 
    10 | American 
    5 | Indian 

Ausprobieren

db.restaurants.aggregate([ 
    {"$group" : {_id:"$cuisine", 
       count_1:{$sum:1}}} 
]) 

Ergebnisse Ergebnis wie folgt aus:

{ "_id" : "American ", "count_1" : 6183 } 
{ "_id" : "Bakery", "count_1" : 691 } 
{ "_id" : "Irish", "count_1" : 190 } 
{ "_id" : "Chicken", "count_1" : 410 } 
{ "_id" : "Ice Cream, Gelato, Yogurt, Ices", "count_1" : 348 } 
{ "_id" : "Egyptian", "count_1" : 14 } 
{ "_id" : "Jewish/Kosher", "count_1" : 316 } 
{ "_id" : "Delicatessen", "count_1" : 321 } 
{ "_id" : "Indonesian", "count_1" : 8 } 
{ "_id" : "Russian", "count_1" : 88 } 
{ "_id" : "Spanish", "count_1" : 637 } 
{ "_id" : "Chinese", "count_1" : 2418 } 
{ "_id" : "Hamburgers", "count_1" : 433 } 
{ "_id" : "Hotdogs", "count_1" : 34 } 
{ "_id" : "Sandwiches/Salads/Mixed Buffet", "count_1" : 255 } 
{ "_id" : "Pancakes/Waffles", "count_1" : 16 } 
{ "_id" : "Turkish", "count_1" : 70 } 
{ "_id" : "Caribbean", "count_1" : 657 } 
{ "_id" : "Donuts", "count_1" : 479 } 
{ "_id" : "Bagels/Pretzels", "count_1" : 168 } 

Ist es möglich, wie die Daten zu erhalten:

{ "American" : 6183 } 
{ "Bakery" : 691 } 
{ "Irish" : 190 } 
{ "Chicken" : 410 } 
{ "Ice Cream, Gelato, Yogurt, Ices" : 348 } 
{ "Egyptian" : 14 } 
{ "Jewish/Kosher" : 316 } 
{ "Delicatessen": 321 } 

und so weiter?

db.restaurants.aggregate(
    { $group: { "_id": {cuisine:"$cuisine"}, 
       "Count": {"$sum":1} 
       } 
    }, 
    { "$project": 
     { "_id": 0, 
     "Cuisine": "$_id.cuisine", 
     "Total":"$Count", 
     } 
    } 
    ) 

Aber hat recht nicht bekommen:

wie so mit Projektion Versuchte

{ "Cuisine" : "American ", "Total" : 6183 } 
{ "Cuisine" : "Bakery", "Total" : 691 } 
{ "Cuisine" : "Irish", "Total" : 190 } 
{ "Cuisine" : "Chicken", "Total" : 410 } 
{ "Cuisine" : "Ice Cream, Gelato, Yogurt, Ices", "Total" : 348 } 
{ "Cuisine" : "Egyptian", "Total" : 14 } 
{ "Cuisine" : "Jewish/Kosher", "Total" : 316 } 
{ "Cuisine" : "Delicatessen", "Total" : 321 } 
{ "Cuisine" : "Indonesian", "Total" : 8 } 
{ "Cuisine" : "Russian", "Total" : 88 } 
{ "Cuisine" : "Spanish", "Total" : 637 } 
{ "Cuisine" : "Chinese", "Total" : 2418 } 
{ "Cuisine" : "Hamburgers", "Total" : 433 } 
{ "Cuisine" : "Hotdogs", "Total" : 34 } 
{ "Cuisine" : "Sandwiches/Salads/Mixed Buffet", "Total" : 255 } 
{ "Cuisine" : "Pancakes/Waffles", "Total" : 16 } 
{ "Cuisine" : "Turkish", "Total" : 70 } 
{ "Cuisine" : "Caribbean", "Total" : 657 } 
{ "Cuisine" : "Donuts", "Total" : 479 } 
{ "Cuisine" : "Bagels/Pretzels", "Total" : 168 } 

Grundsätzlich ich die Zählung neben der Gruppe von Feld wollen, aber in MongoDB.

+0

Sie benötigen eine clientseitige Verarbeitung oder verkleinern, aber Sie es richtig, schon tun. – styvane

+0

Warum möchten Sie Ihre Daten als Schlüssel verwenden? Ich bin nur neugierig. – styvane

+0

Iterieren Sie den resultierenden Cursor mit 'forEach'? –

Antwort

1

Versuchen Sie, diese

db.restaurants.aggregate([ 
    { 
    "$group" : {_id:"$cuisine", count_1:{$sum:1}} 
    } 
]). 
result. 
map(function(o) { 
    var r = {}; 
    r[o._id] = o.count_1; 
    return r; 
}); 
+0

Ich bekomme diesen Fehler: '2016-05-12T17: 36: 51.714 + 0530 E QUERY [thread1] TypeError : db.restaurants.aggregate (...). result ist undefiniert: @ (shell): 1: 1' – Sathya

+0

Was bedeutet die Ausgabe von 'db.restaurants.aggregate ([ { " $ group ": {_id : "$ cuisine", count_1: {$ sum: 1}} } ]) 'sieht für dich aus? Die Ausgabe von 'aggregate()' sollte immer das Array 'result' enthalten. – wickedpixel

+0

http://i.stack.imgur.com/ruIfZ.png, ich probiere das aus in mongo cli client. – Sathya

Verwandte Themen