2017-02-21 10 views
0

У меня есть коллекция, имя которой transactions. Я делюсь объектом коллекции сделокКак запросить в mongodb, чтобы получить отличную запись со счетом

{ 
    "_id" : ObjectId("58aaec83f1dc6914082afe31"), 
    "amount" : "33.00", 
    "coordinates" : { 
     "lat" : "4.8168", 
     "lon" : "36.4909" 
    }, 
    "cuisine" : "Mexican", 
    "date" : ISODate("0062-02-22T11:46:52.738+05:30"), 
    "location" : { 
     "address" : "2414 Trudie Rue", 
     "city" : "West Alisa", 
     "state" : "New York", 
     "zip" : "10000" 
    }, 
    "place_name" : "Outdoors", 
    "place_type" : "Wooden" 
}, 
{ 
    "_id" : ObjectId("58aaec83f1dc6914082afe32"), 
    "amount" : "557.00", 
    "coordinates" : { 
     "lat" : "-36.6784", 
     "lon" : "131.3698" 
    }, 
    "cuisine" : "Australian", 
    "date" : ISODate("1294-10-04T19:53:15.562+05:30"), 
    "location" : { 
     "address" : "5084 Buckridge Cove", 
     "city" : "Sylviaview", 
     "state" : "Hawaii", 
     "zip" : "51416-6918" 
    }, 
    "place_name" : "Toys", 
    "place_type" : "Cotton" 
}, 
{ 
    "_id" : ObjectId("58aaec83f1dc6914082afe33"), 
    "amount" : "339.00", 
    "coordinates" : { 
     "lat" : "45.1468", 
     "lon" : "91.4097" 
    }, 
    "cuisine" : "Mexican", 
    "date" : ISODate("1568-11-25T02:54:53.046+05:30"), 
    "location" : { 
     "address" : "94614 Harry Island", 
     "city" : "Cartwrightside", 
     "state" : "Louisiana", 
     "zip" : "18825" 
    }, 
    "place_name" : "Clothing", 
    "place_type" : "Frozen" 
}, 
{ 
    "_id" : ObjectId("58aaec83f1dc6914082afe34"), 
    "amount" : "173.00", 
    "coordinates" : { 
     "lat" : "-57.2738", 
     "lon" : "19.6381" 
    }, 
    "cuisine" : "Australian", 
    "date" : ISODate("0804-05-07T03:00:07.724+05:30"), 
    "location" : { 
     "address" : "1933 Lewis Street", 
     "city" : "Aufderharville", 
     "state" : "Louisiana", 
     "zip" : "23416" 
    }, 
    "place_name" : "Beauty", 
    "place_type" : "Fresh" 
}, 
{ 
    "_id" : ObjectId("58aaec83f1dc6914082afe34"), 
    "amount" : "173.00", 
    "coordinates" : { 
     "lat" : "-57.2738", 
     "lon" : "19.6381" 
    }, 
    "cuisine" : "Australian", 
    "date" : ISODate("0804-05-07T03:00:07.724+05:30"), 
    "location" : { 
     "address" : "1933 Lewis Street", 
     "city" : "Aufderharville", 
     "state" : "Louisiana", 
     "zip" : "23416" 
    }, 
    "place_name" : "Beauty", 
    "place_type" : "Fresh" 
} 

Я хочу, чтобы получить список отчетливой кухни с общего количества

Выход

{ 
    "name" : 'Mexican', 
    "count" : '2' 
}, 
{ 
    "name" : 'Australian', 
    "count" : '3' 
}, 

Я мог бы сделано легко с mysql но я точно знаю в монго дб, как я новичок с MongoDB

Я попытался с примером, и я ничего не нашел:

db.transactions.aggregate(
    {$group: {_id:'$cuisine'},count:{$sum:1}} 
    ).result; 
+0

Возможная Дубликат [MongoDB SELECT COUNT (различны х) на индексированный столбец - рассчитывать уникальные результаты для больших наборов данных] (http://stackoverflow.com/questions/11782566/mongodb-select-countdistinct-x -on-an-indexed-column-count-unique-results-for) – hassan

+0

благодарю @HassanAhmed за комментарий, но я не нашел, что сообщение очень полезно –

ответ

1

Пожалуйста, попробуйте код, приведенный ниже. Вы должны сгруппировать по кухне записи и подсчитать их количество. Позже в конвейере проекта вы можете определить окончательный вид.

db.transactions.aggregate([ 
{ $group: { _id: "$cuisine", count: { $sum: 1 } } }, 
{ $project:{ _id: 0, name: "$_id", count:"$count" } } 
]); 
+0

О, спасибо вам, @hasan, это то, что я искал, но могу ли вы объясните мне, как это работает и что я делаю неправильно? –

+0

Прежде всего структура агрегации работает с этапами конвейера, поэтому агрегированная функция принимает массив как параметр. В этом массиве вы должны определить этапы конвейера. В вашем вопросе первый этап должен быть групповой, и вы сделали это хорошо. На втором этапе вы должны использовать функцию проекта, которая изменит результат запроса. Например первый групповой этап будет возвращать что-то вроде этого: { "_id": 'мексиканский', "счетчик": '2' }, { "_id": 'австралийский', "счетчик": " 3 ' }, Этап проекта перестраивает его, как будто вы получаете результат. –

 Смежные вопросы

  • Нет связанных вопросов^_^