Javascript 默认createdAt时间戳中的MongoDB Mongoose按日期分组
我有一个叫Session的模型。它具有id、设备和Mongoose默认时间戳。是这样的Javascript 默认createdAt时间戳中的MongoDB Mongoose按日期分组,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个叫Session的模型。它具有id、设备和Mongoose默认时间戳。是这样的 { _id: 5da977e431e58d4e7fc1da1c, device: 'Galaxy M10', createdAt: 2019-10-18T08:29:24.498Z, updatedAt: 2019-10-18T08:32:10.768Z, } 我想按createdAt日期将此会话分组。所以我试过这个 const data = await db.Sess
{
_id: 5da977e431e58d4e7fc1da1c,
device: 'Galaxy M10',
createdAt: 2019-10-18T08:29:24.498Z,
updatedAt: 2019-10-18T08:32:10.768Z,
}
我想按createdAt日期将此会话分组。所以我试过这个
const data = await db.Session.aggregate([
{ $match: { createdAt: { $gte: date } } },
{
$group: {
_id: "$createdAt" ,
count: { $sum: 1 }
}
}
]);
我得到的结果是
{ _id: 2019-10-17T11:32:49.346Z, count: 1 },
{ _id: 2019-10-18T07:14:45.695Z, count: 1 },
{ _id: 2019-10-17T10:49:35.434Z, count: 1 },
{ _id: 2019-10-18T08:17:05.999Z, count: 1 },
{ _id: 2019-10-17T09:56:53.574Z, count: 1 },
{ _id: 2019-10-18T07:14:15.154Z, count: 1 },
{ _id: 2019-10-18T07:07:19.346Z, count: 1 },
{ _id: 2019-10-18T07:13:57.720Z, count: 1 },
{ _id: 2019-10-17T13:09:17.721Z, count: 1 },
{ _id: 2019-10-18T07:31:59.900Z, count: 1 },
{ _id: 2019-10-18T08:29:24.498Z, count: 1 },
{ _id: 2019-10-18T08:05:54.339Z, count: 1 }
我的预期结果是
{ _id: 2019-10-18, count: 8 },
{ _id: 2019-10-17, count: 4 },
如果这是在SQL上,而不是在
groupbycreatedat
上,我会groupbydate(createdAt)
。但是在MongoDB中我如何做到这一点呢?您可以通过从日期中提取“dayOfMonth”、“month”和“year”并按三者进行分组来做到这一点。查询将变为:
db.Session.aggregate([
{ $match: { createdAt: { $gte: date } } },
{ $project: { dayOfMonth: { $dayOfMonth: $date },
month: { $month: $date },
year: { $year: $date },
}
},
{
$group: {
_id: {
year: $year,
month: $month,
dayOfMonth: $dayOfMonth
} ,
count: { $sum: 1 }
}
}
]);
它不起作用。错误是什么?这不是正确的答案,就像他询问输出一样…类似的…db.getCollection('db')。聚合([{$match:{createdAt:{$gte:date}},{$project:{yearMonthDayUTC:{$dateString:{format:'%Y-%m-%d',date date:$createdAt:}}},{$group:{id:“$yearMonthDayUTC”,计数:{$sum:1}}}]);您是否找到了有效的解决方案?