我对MongoDB和一般的编程语言还很陌生,不确定如何实现以下目标:
我有一个mongodb Collection,其中包含许多类似于以下文档的文档,并且它们都具有相同的结构,只是在某些字段中改变了一些值:
{
"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” (对于集合中的每个文档)在两个确切的日期之间,然后将它们放到具有此确切结构的新数组中
示例:
“获取日期 “ 2019-05-14” 和之间的 “ co” 字段的所有值“ 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
我尝试搜索此问题,但未找到任何相关内容。
我所能到达的最遥远的地方是使用find运算符获取了两个字段:
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查询操作就可以实现所需的最终输出,也许我需要首先按照我的方式提取数据,然后在Javascript中使用该JSON对这些字段进行第二次提取,以生成具有我所需的“干净”最终输出结构的最终文档。
如果有人知道如何实现这一目标,我相信将来会有很多人需要解决方案。
非常感谢
答案 0 :(得分:0)
有多种方法可以执行此操作,但是所有方法都将有两个操作。
第一种方法:编写脚本可能是在python / java中,该脚本读取两个值以执行所需的数组创建并更新文档。
第二种方法:使用mongo javascript的forEach子句并读取所有数据并执行更新。
我的建议是,如果这也是您对新数据也需要的,最好编写一个脚本在内存中执行操作,然后插入MongoDB中。 这样会更快,更轻松。