Mongodb .aggregate()是否可以返回按月份的日期分组的事件?

Mongodb .aggregate()是否可以返回按月份的日期分组的事件?,mongodb,mongoose,nosql,Mongodb,Mongoose,Nosql,我在Mongoose中有这样一个事件模型: let eventSchema = new Schema( { description: { type: String, required: true }, start_time: { type: Date, required: true }, end_time: { type: Date, required: true } } ); 我正试图将它们按月日分组返回,以便将它们解析到日历上。我认为使用.aggregate

我在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)
        }
    })
}
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)
        }
    })
}
这就是我得到的回报:

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

它成功地按日期分组,但我想得到实际的对象,而不仅仅是这个。我应该不使用.aggregate吗?Mongoose/MongoDB中是否有其他工具可以实现我正在寻找的功能?

您可以使用$push将对象添加到分组结果中。每个对象都由变量表示,因此聚合可以如下所示:

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)
        }
    })
}
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)
        }
    })
}

你的建议稍加修改就奏效了。我必须在{u id:{}之外添加对象:{$push:$$ROOT}。否则,我会得到一个错误,说$push不是有效的运算符。非常感谢。