MongoDB $concatenate Дата Ошибка
Я работаю над проектом агрегации Монго, чтобы группировать средние показания каждые два часа, которые возвращают желаемый результат следующим образом
{
"_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": {
'_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 Я пробовал несколько вариантов, но не могу заставить его работать
2 ответа
Вы можете использовать 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]
}
]
}
}
Преобразование int в str будет невозможно в конвейере. Так $concat
не будет возможно для данного формата данных.
Другой метод, который мог бы сработать, это трюк для преобразования года, месяца, дня в BSON. Date
форматировать объект
Вдохновение в том, что dateObj: {$add: [new Date(0), '$time_in_sec_epoch']}
,
Расчет $time_in_sec_epoch
может быть сделано с помощью операторов агрегирования, таких как $sum
, $divide
, $subtract
и т.д. Вы можете использовать формулу, приведенную в этом ответе. Это будет утомительно, но, надеюсь, вы поняли идею.
Для dateObj
использовать строковую часть $dateToString