如何解决Mongodb按功能分组提供意外数据
我正在使用MongoDB根据插入的数据hours & minutes
对数据进行分组。但是它给出了奇怪而出乎意料的结果。
如果hours & minutes
在Single Digit
中,我希望输入{strong> 2位数字。
例如,如果小时是9,我希望它是09 ,并且分钟也一样。
以下是我使用的分组功能。
$group: {
_id: {
hour: {
'$hour': { date: '$entryDayTime',timezone: '+0530' }
}
}
}
这是我使用$group
之后获得的数据。
{ _id: { hour: 10,minute: 5 },value: 26 },{ _id: { hour: 9,minute: 55 },value: 260 }
但是我希望结果采用以下模式。
{ _id: { hour: 10,minute: 05 },{ _id: { hour: 09,value: 260 }
$group
中是否提供任何选项来获取double digits if they are in single digits
中的小时和分钟
解决方法
您可以使用$cond
db.collection.aggregate([
{
$group: {
_id: {
hour: {
"$hour": {
date: "$key",timezone: "+0530"
}
}
}
}
},{
$project: {
"hour": {
"$cond": [ //Condition
{
"$lte": [ //Less than 9
"$_id.hour",9
]
},{
"$concat": [ //Concatenate 0,Concat works only Strings
"0",{
"$toString": "$_id.hour"
}
]
},{ //To keep only string for > 9 cases
"$toString": "$_id.hour"
}
]
}
}
}
])
更新:
要包括分钟,请添加另一个变量。
db.collection.aggregate([
{
$group: {
_id: {
hour: {
"$hour": {
date: "$key",timezone: "+0530"
}
},minute: {//Including minute also
"$minute": {
date: "$key",{
$project: {
"hour": {
"$cond": [
{
"$lte": [//Checking less than 9
"$_id.hour",{
"$concat": [//Concatenating 0
"0",{//Same format for >9 cases to maintain uniformity
"$toString": "$_id.hour"
}
]
},"minute": {
"$cond": [
{
"$lte": [ //checking less than 9 on minute
"$_id.minute",{
"$concat": [ //Concatenating 0
"0",{
"$toString": "$_id.minute"
}
]
},{//Keeping uniform format - string type
"$toString": "$_id.minute"
}
]
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。