Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb sql中组concat的模拟_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb sql中组concat的模拟

Mongodb sql中组concat的模拟,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,在聚合过程中,我得到了以下数据: { “_id”:“计费/默认控制器/操作索引”, “最小时间”:0.033, “最长时间”:5.25, “执行时间”:555.4909997, “qt”:9059, “计数”:2, “日期”:[ ISODate(“2014-02-10T00:00:00.000Z”), ISODate(“2014-02-11T00:00:00.000Z”) ] }, 如何更改我的查询: db.page\u speed\u reduced.aggregate([ {$group:

在聚合过程中,我得到了以下数据:

{
“_id”:“计费/默认控制器/操作索引”,
“最小时间”:0.033,
“最长时间”:5.25,
“执行时间”:555.4909997,
“qt”:9059,
“计数”:2,
“日期”:[
ISODate(“2014-02-10T00:00:00.000Z”),
ISODate(“2014-02-11T00:00:00.000Z”)
]
},
如何更改我的查询:

db.page\u speed\u reduced.aggregate([
{$group:{
_id:“$value.route”,
最小时间:{$min:$value.min\u-time},
max_time:{$max:$value.max_time},
执行时间:{$sum:$value.exec_time},
qt:{$sum:$value.qt},
计数:{$sum:numberprint(1)},
日期:{$push:“$\u id.date”},
}}
]);
要将“$date”作为串联字符串获取,请执行以下操作:

2014-02-102014-02-11
更新:

我尝试了这个变体,但mongodb产生了错误:

db.page\u speed\u reduced.aggregate([
{$group:{
_id:“$value.route”,
最小时间:{$min:$value.min\u-time},
max_time:{$max:$value.max_time},
执行时间:{$sum:$value.exec_time},
qt:{$sum:$value.qt},
计数:{$sum:numberprint(1)},
日期:{$push:“测试钉住”},
}},
{$项目:{
'日期':{$concat:['$date']}
//'date':{$concat:'$date'}//出现一些错误
}}
]);
未捕获异常:聚合失败:{
“errmsg”:“异常:$concat仅支持字符串,不支持数组”,
“代码”:16702,
“确定”:0
}
'日期':{$concat:'$date'}

此链接可能会给您一个提示:


年份:{$concat:[$year]}

根据到目前为止的评论,不清楚你在分组什么,或者你想要什么作为最终结果,除了说你想把你的日期连接成类似“仅仅一天”的东西,没有时间或分钟。想必你为了某种目的想要那些不同的日子

您可以在日期上使用不同的管道,并且操作员也是。不幸的是,所有的日期运算符都会生成一个整数作为其结果,并且对于所需的日期字符串排序,$concat只能处理字符串。另一个问题是,不能在聚合中将整数转换为字符串类型

但是您可以使用子文档,这里我们只处理日期:

db.record.aggregate([
//展开阵列以使用它
{$unwind:“$date”},
//将项目导入我们的新“日”文档中
{$project:{
日期:{
年份:{$year:$date},
月份:{$month:$date},
日期:{$dayOfMonth:$date}
}
} },
//如果日期顺序重要,可选择排序[最早->最新]
{$sort:{“day.year”:-1,“day.month”:-1,“day.day”:-1},
//将唯一值回卷到数组中
{$group:{{U id:$\U id],天数:{$addToSet:“$day”}}
])
因此,它不是一个字符串,但可以很容易地将其后处理为一个字符串,但最重要的是它是分组和可排序的

如果希望唯一的
日期
以这种方式作为末尾的数组,或者是否希望按这些日期对总计进行分组,则原则保持不变。因此,首先要记住使用日期操作符的$unwind和$project部分

--编辑--

多亏了社区,如中所示,$substr有一种未记录的行为,其中整数可以转换为字符串

db.record.aggregate([
//展开阵列以使用它
{$unwind:“$date”},
//将项目导入我们的新“日”文档中
{$project:{
日期:{
年份:{$year:$date},
月份:{$month:$date},
日期:{$dayOfMonth:$date}
}
} },
//如果日期顺序重要,可选择排序[最早->最新]
{$sort:{“day.year”:-1,“day.month”:-1,“day.day”:-1},
//现在我们要投射到一个字符串**magic@heinob**
{$project:{
日期:{$concat:[
{$substr:[“$day.year”,0,4]},
"-",
{$substr:[“$day.month”,0,2]},
"-",
{$substr:[“$day.day”,0,2]}
]}
}},
//将唯一值回卷到数组中
{$group:{{U id:$\U id],天数:{$addToSet:“$day”}}
])

现在,
days
是字符串。正如我前面提到的,如果排序对您来说很重要,那么最好的方法是按照已经完成的方式投影到文档类型中,并按数字键排序。当然,转换日期的$project可以简化为$group阶段,这可能是处理整个文档时需要执行的操作。

您好,谢谢,但它不起作用(我用代码更新问题example@Hett你回来看答案了吗?我想你的需求得到了满足。你是想得到“缩短日期”的“集合”吗,作为一天,被推到按原始文档的
\u id
分组的数组中?只是确保这是您想要的。或者您想在这些日期前对
求和
?我们不确定,因为您还引用了文档中未列出的字段。