2015-11-23 2 views
2

У меня есть эти документы фильма, показывающие время и дату:выбирать документы, сгруппированные по полю

`{ 
    "_id": ObjectId("5628668c3e82c49245b7acdc"), 
    "ticketID": ObjectId("5606d36b5fbd7d76028b4b08"), 
    "uid": "50000", 
    "day": "Friday", 
    "date": "2015-10-23 21:05:00", 
    "adult": NumberLong(550), 
    "student": NumberLong(550), 
    "children": NumberLong(250), 
    "limit": NumberLong(20), 
    "sold": NumberLong(0) 
},{ 
    "_id": ObjectId("562866013e82c49045b7acdc"), 
    "ticketID": ObjectId("5606d36b5fbd7d76028b4b08"), 
    "uid": "50000", 
    "day": "Friday", 
    "date": "2015-10-23 19:30:00", 
    "adult": NumberLong(1050), 
    "student": NumberLong(800), 
    "children": NumberLong(550), 
    "limit": NumberLong(20), 
    "sold": NumberLong(0) 
},{ 
    "_id": ObjectId("562865013e82c49845b7acda"), 
    "ticketID": ObjectId("5606d36b5fbd7d76028b4b08"), 
    "uid": "50000", 
    "day": "Friday", 
    "date": "2015-10-23 18:45:00", 
    "adult": NumberLong(1500), 
    "student": NumberLong(750), 
    "children": NumberLong(750), 
    "limit": NumberLong(20), 
    "sold": NumberLong(0) 
} 
` 

Я хочу, чтобы сгруппировать окончательный результат на «день», где «TicketID» соответствует «дата» в качестве объекта и добавив, "взрослый", "студент", "дети", "предел" в массив

- UPDATE -

Я хотел бы возвращенную структуру следовать:

{ 
    "_id": "ticketID", 
    "day": "Friday", 
    "items": [ 
    { 
     "date": date, 
     "time": time"adult": price, 
     "children": price, 
     "student": price, 
     "limit": value 
    }, 
    { 
     "date": date, 
     "time": time"adult": price, 
     "children": price, 
     "student": price, 
     "limit": value 
    }, 
    { 
     "date": date, 
     "time": time"adult": price, 
     "children": price, 
     "student": price, 
     "limit": value 
    } 
    ] 
} 
+0

Я хотел бы возвращенную структуру следовать: '{ «_id»:«TicketID», "день": "пятница" "пункты": [ { "дата": дата, "время": время "для взрослых": цена, "дети": цена, "студента": цена, «limit»: значение }, { "Дата": дата, "Время": время "для взрослых": цена, "дети": цена, "студент": цена, "предел": значение }, { "дата": дата, "время": время "для взрослых": цена, "дети": цена, "студент": цена, "предел": значение } ] } ' – Bishoplee

ответ

1

Выполните следующую агрегацию трубопровод, который использует оператор в $group группировать документы по указанным полям, добавьте items массив с помощью оператора аккумуляторного $push, который возвращает массив значений выражения для каждой группы. Оператор $project трубопровода затем перестраивает документы путем внесения изменений в поля, чтобы получить окончательную желаемую структуру:

var pipeline = [ 
    { 
     "$group": { 
      "_id": { 
       "ticketID": "$ticketID", 
       "day": "$day" 
      }, 
      "items": { 
       "$push": { 
        "date": "$date", 
        "time": "$time", 
        "adult": "$adult", 
        "children": "$children", 
        "student": "$student", 
        "limit": "$limit" 
       } 
      } 
     } 
    }, 
    { 
     "$project": { 
      "_id": "$_id.ticketID", 
      "day": "$_id.day", 
      "items": 1 
     } 
    } 
]; 

db.collection.aggregate(pipeline); 
+0

, что решить мои проблемы. – Bishoplee