.aggregate()可以向我返回按月份的日期分组的事件吗?

时间:2018-06-24 02:49:12

标签: mongodb mongoose nosql

我在Mongoose中有一个Event模型,例如:

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 :(得分:1)

您可以使用$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)
        }
    })
}