这是我的查询,我想将$ _id与YYYY-MM-DD结合起来?或者像Mysql DATE()这样的函数将DATETIME格式转换为DATE格式?
db.event.aggregate([
{
$project: {
"created": {$add: ["$created", 60*60*1000*8]},
}
},
{
$group: {
"_id": {
"year": {"$year": "$created"},
"month": {"$month": "$created"},
"day": {"$dayOfMonth": "$created"}
},
"count": { $sum: 1 }
}
}
])
答案 0 :(得分:3)
您基本上已经使用日期聚合运算符将组件拆分为复合_id
键,这可能是处理它的最佳方法。实际上,您可以使用$substr
运算符并使用$concat
:
db.event.aggregate([
{ "$project": {
"created": {$add: ["$created", 60*60*1000*8]},
}},
{ "$group": {
"_id": {
"year": {"$year": "$created"},
"month": {"$month": "$created"},
"day": {"$dayOfMonth": "$created"}
},
"count": { "$sum": 1 }
}},
{ "$project": {
"_id": { "$concat": [
{ "$substr": [ "$_id.year", 0, 4 ] },
"-",
{ "$cond": [
{ "$lte": [ "$_id.month", 9 ] },
{ "$concat": [
"0",
{ "$substr": [ "$_id.month", 0, 2 ] }
]},
{ "$substr": [ "$_id.month", 0, 2 ] }
]},
"-",
{ "$cond": [
{ "$lte": [ "$_id.day", 9 ] },
{ "$concat": [
"0",
{ "$substr": [ "$_id.day", 0, 2 ] }
]},
{ "$substr": [ "$_id.day", 0, 2 ] }
]}
]},
"count": 1
}}
])
因此,从日期部分到字符串的值有一些强制,并且在两个以下两个数字中填充任何值,前导0就像在" YYYY-MM-DD"格式。
注意到它可以完成,并且已经能够完成一段时间,但$substr
运算符的手册页描述中明显缺少它。
不确定您的日期数学"在那里开始。我会说你最好使用聚合运算符然后处理你想要调整的值,或者确实它类似于" timezone"校正,然后你可能会更好地处理客户端。