这是我的mongodb结构,我需要聚合帮助
{
"_id": {
"$oid": "5f7c2b6ee63ba648209754f1"
},
"duration": 23,
"country": "India",
"countryCode": "IN",
"city": "tamilnadu
"date": "10/06/2020",
"timeStamp": "2020-10-06T08:31:42.768Z",
"__v": 0
}
{
"_id": {
"$oid": "5f7c2b7ce63ba648209754f2"
},
"duration": 12,
"country": "India",
"countryCode": "IN",
"date": "10/06/2020",
"timeStamp": "2020-10-06T08:31:56.438Z",
"__v": 0
}
我需要帮助以按月排序
我需要的输出类似于基于日期或时间戳的月份计数和月份名称
[
{
"data": {
"October-2020": 489
},
data:{
"august-2020":12
}
}
]
答案 0 :(得分:0)
您可以尝试
$addFields
使用$toDate
将字符串日期转换为ISO日期,如果您已经具有ISO日期格式,则可以跳过此阶段$group
按月和年
$month
形式timeStamp
获取月份,并使用$let
从月份数组转换为字符串格式$year
中的timeStamp
获取年份,并使用$toString
转换为字符串格式,因为$concat
仅连接字符串$concat
用单个字符串连接月份和年份$sum
$project
以显示数据字段并使用$arrayToObject
let months = ["", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
db.collection.aggregate([
{ $addFields: { timeStamp: { $toDate: "$timeStamp" } } },
{
$group: {
_id: {
$concat: [
{
$let: {
vars: { monthsInString: months },
in: { $arrayElemAt: ["$$monthsInString", { $month: "$timeStamp" }] }
}
},
"-",
{ $toString: { $year: "$timeStamp" } }
]
},
count: { $sum: 1 }
}
},
{
$project: {
_id: 0,
data: {
$arrayToObject: [
[{ k: "$_id", v: "$count" }]
]
}
}
}
])