本文介绍了按月分组统计的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个预订表,我想要获取一个月的预订量,即按月分组。
我搞不懂如何从日期获取月份。
以下是我的架构:
{
"_id" : ObjectId("5485dd6af4708669af35ffe6"),
"bookingid" : 1,
"operatorid" : 1,
...,
"bookingdatetime" : "2012-10-11T07:00:00Z"
}
{
"_id" : ObjectId("5485dd6af4708669af35ffe7"),
"bookingid" : 2,
"operatorid" : 1,
...,
"bookingdatetime" : "2014-07-26T05:00:00Z"
}
{
"_id" : ObjectId("5485dd6af4708669af35ffe8"),
"bookingid" : 3,
"operatorid" : 2,
...,
"bookingdatetime" : "2014-03-17T11:00:00Z"
}
这是我尝试过的:
db.booking.aggregate([
{ $group: {
_id: new Date("$bookingdatetime").getMonth(),
numberofbookings: { $sum: 1 }
}}
])
但返回:
{ "_id" : NaN, "numberofbookings" : 3 }
我哪里出错了?
推荐答案
您不能在聚合管道中包含任意JavaScript,因此,因为您将bookingdatetime
存储为string
而不是Date
,所以不能使用$month
运算符。
但是,由于日期字符串遵循严格的格式,您可以使用$substr
运算符从字符串中提取月份值:
db.test.aggregate([
{$group: {
_id: {$substr: ['$bookingdatetime', 5, 2]},
numberofbookings: {$sum: 1}
}}
])
输出:
{
"result" : [
{
"_id" : "03",
"numberofbookings" : 1
},
{
"_id" : "07",
"numberofbookings" : 1
},
{
"_id" : "10",
"numberofbookings" : 1
}
],
"ok" : 1
}
这篇关于按月分组统计的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!