我正在进行一个mongo聚合项目,每隔两个小时对平均读数进行分组,它返回所需的输出如下
{
"_id": {
"Year": 2016,
"locationID": " WL 001",
"Day": 25,
"Hour": 12,
"Month": 1
},
"temperature": 10.858749999999999,
"pH": 0,
"Conductivity": 2032.375
}我想重组数据格式,并将_id字段的日期部分连接起来,以便它表示下面的新数据格式。
{
"_id": {
"locationID": " WL 001",
},
"Readings": {
"temperatue": {
"value": 8.879
},
"SensoreDate": {
"value": "2016-01-25:12"
},
"pH": {
"value": 16.81
},
"Conductivity": {
"value": 1084
}
},
}下面是聚合查询的$project部分
{
"$project": {
'_id': '$_id.locationID',
'Readings': {
'pH': {'value': '$pH'},
'temperature': {'value': '$temperature'},
'Conductivity': {'value': '$Conductivity'},
'SensoreDate': {'value': {'$concat': ["$_id.Year", "$_id.Month", "$_id.Day", "$_id.Hour"]} }
}
}
}但是我得到了一个错误,$concat只支持字符串,而不是NumberInt32,我尝试了几个选项,但无法让它工作。
发布于 2016-11-12 22:57:47
您可以使用concat和substr将它们加入到约会中。
'SensoreDate': {
'value': {
'$concat': [{
$substr: ["$_id.Year", 0, -1]
},
"-", {
$substr: ["$_id.Month", 0, -1]
},
"-", {
$substr: ["$_id.Day", 0, -1]
},
":", {
$substr: ["$_id.Hour", 0, -1]
}
]
}
}发布于 2016-11-12 18:23:20
在管道中无法将int转换为str。因此,对于给定的数据格式,$concat是不可能的。
另一种可以工作的方法是技巧,将年份、月、日转换为BSON Date格式对象。
灵感来自于dateObj: {$add: [new Date(0), '$time_in_sec_epoch']}。
$time_in_sec_epoch的计算可以使用$sum、$divide、$subtract等聚合运算符来完成。您可以使用这个answer中给出的公式。这将是乏味的,但希望你能得到这个想法。
对于字符串部件的dateObj,请使用$dateToString
https://stackoverflow.com/questions/40565286
复制相似问题