Mongodb .aggregate()是否可以返回按月份的日期分组的事件?
我在Mongoose中有这样一个事件模型: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
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不是有效的运算符。非常感谢。