У меня есть следующая функция агрегатора, которую я не запускаю напрямую в консоли Монго. Я передаю этот агрегатор в API в виде строки запроса. Я закодирую следующий агрегатор напрямую и передам запрос get в виде строки запроса.
[
{
"$limit": 500
},
{
"$match": {
"timestamp": {
"$gte": {
"$dte": "2017-07-01"
},
"$lt": {
"$dte": "2020-12-31"
}
}
}
},
{
"$group": {
"_id": { "$year": "$timestamp" },
"scores": { "$push": "$statement.result.score.scaled" },
"duration_seconds": { "$push": "$statement.result.duration_seconds" }
}
},
{
"$project": {
"scores": 1,
"duration_seconds": 1,
"statements_count": 1,
"semester": {
"$cond": [
{
"$lte": [
{
"$month":
{
"$dateFromString": {
"dateString": "$timestamp"
}
}
}, 6
]
}, "Jan", "July"
]
}
}
},
{
"$group": {
"_id": { "semester": "$semester", "year": { "$year": "$timestamp" } },
"avg_score": { "$avg": "$scores" },
"avg_duration": { "$avg": "$duration_seconds" },
"statements_count": { "$sum": 1 }
}
}
]
Здесь у меня есть документ выписки, он имеет timestamp
, что является датой ISO, но в строковом формате. Я хочу сгруппировать выписки по семестрам (если месяц 1-6: Jan, 6-12: July
)
Здесь проблема в том, что я использую mongo 3.4.7, а оператор "$dateFromString"
работает только в версиях выше 3.6. Итак, я получаю ошибку.
Так как я могу сгруппировать это по семестрам в версии Монго 3.4.7?
При группировке по семестрам я сталкиваюсь со следующей проблемой.
И моя агрегация не работает для группировки по семестрам. Потому что, как я могу сначала использовать группировку семестра и выполнить этап проекта? Групповой этап не поддерживает агрегатор $cond
и т. Д., Который я могу использовать только на этапе project
.