Может ли .aggregate () вернуть мне события, сгруппированные по дням месяца? - PullRequest
0 голосов
/ 24 июня 2018

У меня есть модель событий в Mongoose как таковая:

let eventSchema = new Schema(
  {
    description: { type: String, required: true },
    start_time: { type: Date, required: true },
    end_time: { type: Date, required: true }
  }
);

Я пытаюсь вернуть их сгруппированными по дням месяца, чтобы я мог проанализировать их в календаре.Я думал, что использование .aggregate([]) и $group сделает это для меня.Я запрашиваю мою коллекцию событий следующим образом:

exports.event_get = (req, res) => {
    let query = Event.aggregate([
        {$group: {
            _id: {
               date : { $dayOfMonth: '$start_time' }
        }}}
    ]).exec(function(err, e) {
        if (err) {
            res.send(err)
        } else {
            res.send(e)
        }
    })
}

Вот что я получаю:

[
  {
    "_id": {
       "date": 5
    }
  },
  {
    "_id": {
       "date": 1
    } 
  }
]

Она успешно группируется по дате, но я хочу получить реальные объектыне только это.Разве я не должен использовать .aggregate() для этого?Есть ли другой инструмент в Mongoose / MongoDB, который будет делать то, что я ищу?

1 Ответ

0 голосов
/ 24 июня 2018

Вы можете добавить объекты в результаты группировки, используя $push. Каждый объект представлен переменной $$ ROOT , поэтому ваша агрегация может выглядеть следующим образом:

exports.event_get = (req, res) => {
    let query = Event.aggregate([
        {$group: {
            _id: {
               date : { $dayOfMonth: '$start_time' }                   
            },
            {  objects: { $push: "$$ROOT" } }
        }}
    ]).exec(function(err, e) {
        if (err) {
            res.send(err)
        } else {
            res.send(e)
        }
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...