Я довольно плохо знаком с MongoDB и языками программирования в целом, не совсем понимая, как достичь следующей цели:
У меня есть коллекция mongodb со многими документами, подобными представленным ниже, и все они имеют одинаковую структуру, меняя только некоторые значения в некоторых полях:
{
"status": "ok",
"data": {
"aqi": 48,
"idx": 8495,
"attributions": [
{
"url": "http://www.juntadeandalucia.es/medioambiente/site/portalweb/",
"name": "Consejería de Medio Ambiente y Ordenación del Territorio :: Junta de Andalucía"
},
{
"url": "http://www.eea.europa.eu/themes/air/",
"name": "European Environment Agency"
},
{
"url": "https://waqi.info/",
"name": "World Air Quality Index Project"
}
],
"city": {
"geo": [
37.3485317,
-5.9877044
],
"name": "Bermejales, Sevilla, Spain",
"url": "https://aqicn.org/city/spain/andalucia/sevilla/bermejales"
},
"dominentpol": "o3",
"iaqi": {
"co": {
"v": 3.2
},
"no2": {
"v": 2.8
},
"o3": {
"v": 47.6
},
"p": {
"v": 1012.1
},
"pm10": {
"v": 4
},
"so2": {
"v": 2.6
},
"w": {
"v": 6.7
}
},
"time": {
"s": "2019-05-14 12:00:00",
"tz": "+02:00",
"v": 1559487600
},
"debug": {
"sync": "2019-05-14T11:38:05+09:00"
}
}
}
Что мне нужно сделать, это извлечь значение полей "data.time.s" и "data.iaqi.co.v" (для каждого документа в коллекции) между двумя точными датами и объединить их в новый массив с такой точной структурой:
Пример:
"Получить все значения " co " поле между датами " 2019-05-14 " и " 2019-05-29"
Окончательный результат:
Дата, значение
2019-05-14 12: 00: 00,3.2
2019-05-15 00: 00: 00,14.5
2019-05-17 05: 00: 00,1
2019-05-19 20: 00: 00,2,3
2019-05-28 08: 00: 00,33.4
2019-05-28 10: 00: 00,18,8
2019-05-28 12: 00: 00,11,5
2019-05-28 13: 00: 00,12.4
2019-05-29 06: 00: 00,6.4
Я пытался найти этот вопрос, но не нашел ничего связанного.
Самое большое, чего я достиг, - это получение двух полей, необходимых с помощью оператора поиска:
db.getCollection("prueba2").find(
{
"data.time.s" : {
"$gte" : "2019-05-14",
"$lte" : "2019-05-29"
}
},
{
"data.iaqi.co.v" : "$data.iaqi.co.v",
"data.time.s" : "$data.time.s",
"_id" : NumberInt(0)
}
);
Но с помощью этой операции я получаю также всю структуру из родительских полей:
{
"data" : {
"iaqi" : {
"co" : {
"v" : 3.2
}
},
"time" : {
"s" : "2019-05-14 12:00:00"
}
}
}
// ----------------------------------------------
{
"data" : {
"iaqi" : {
"co" : {
"v" : 14.5
}
},
"time" : {
"s" : "2019-05-15 00:00:00"
}
}
}
// ----------------------------------------------
etc etc etc
Я не совсем уверен, что окончательный результат, который мне нужно получить, может быть достигнут всего одной операцией запроса MongoDB, может быть, мне нужно сначала извлечь данные так, как я это сделал, а затем работать с этим JSON в Javascript иметь второе извлечение этих полей для генерации окончательного документа с той «чистой» конечной структурой вывода, которая мне нужна.
Пожалуйста, если кто-нибудь знает, как этого добиться, я уверен, что многим людям понадобится решение для этого в будущем.
Большое спасибо