gpt4 book ai didi

mongodb - 如何将数字 1 格式化为字符串 "01"以进行聚合?

转载 作者:IT老高 更新时间:2023-10-28 13:24:14 32 4
gpt4 key购买 nike

我正在尝试根据文档中的日期字段以“YYYYMMDD”的形式创建聚合键。但是,使用 $month$dayOfMonth 运算符,我只能返回数字,而无法将它们格式化为前导零(此外,我无法连接数字)。

由于 Map/Reduce 的阻塞性质,我更喜欢聚合而不是 Map/Reduce。有什么想法吗?

最佳答案

您基本上使用 $concat运算符以几个条件连接字符串,以及 $substr处理转换:

"day": { 
"$concat": [
{ "$substr": [ { "$year": "$date" }, 0, 4 ] },
{ "$cond": [
{ "$lte": [ { "$month": "$date" }, 9 ] },
{ "$concat": [
"0", { "$substr": [ { "$month": "$date" }, 0, 2 ] }
]},
{ "$substr": [ { "$month": "$date" }, 0, 2 ] }
]},
{ "$cond": [
{ "$lte": [ { "$dayOfMonth": "$date" }, 9 ] },
{ "$concat": [
"0", { "$substr": [ { "$dayOfMonth": "$date" }, 0, 2 ] }
]},
{ "$substr": [ { "$dayOfMonth": "$date" }, 0, 2 ] }
]}
]
}

如果您按“天”聚合,另一种方法是仅使用带有日期数学的“纪元”值:

"day": {
"$subtract": [
{ "$subtract": [ "$date", new Date("1970-01-01") ] },
{ "$mod": [
{ "$subtract": [ "$date", new Date("1970-01-01") ] },
1000 * 60 * 60 * 24
]}
]
}

对两个日期对象的任何日期数学运算都会导致纪元毫秒作为差异。因此,使用纪元日期作为日期对象以进行转换。结果值是时间戳值的“天”,可以在处理结果时反馈以创建日期对象。

可以说,您可以使用 $year 在后期处理中做同样的事情和 $dayOfYear结果,因为这些也足以在客户端处理中重构日期对象

关于mongodb - 如何将数字 1 格式化为字符串 "01"以进行聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25114870/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com