我在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中是否有其他工具可以满足我的需求?
答案 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)
}
})
}