【问题标题】:extract values from field after mongodb query searchmongodb查询搜索后从字段中提取值
【发布时间】:2023-04-05 15:12:01
【问题描述】:

总的来说,我对 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" 的值(对于集合中的每个文档)在两个确切日期之间,并将它们放在具有这种确切结构的新数组中:

示例:
"获取日期 "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对这些字段进行第二次提取,以生成具有我需要的“干净”最终输出结构的最终文档。

如果有人知道如何实现这一点,我相信将来会有很多人需要解决方案。

非常感谢

【问题讨论】:

    标签: arrays mongodb search extract


    【解决方案1】:

    有多种方法可以这样做,但所有方法都有两个操作。

    第一种方法:可以在 python/java 中编写一个脚本,读取两个值执行所需的数组创建和更新文档。

    第二种方法:使用mongo javascript的forEach子句,读取所有数据并执行更新。

    我的建议是,如果这也是您对新数据的要求,最好编写一个在内存中执行操作然后插入 MongoDB 的脚本。 这样会更快、更轻松。

    【讨论】:

    • 我需要使用 HTML 页面中的最终输出数据来表示带有 HighCharts 框架的图表。也许最好的选择是将输出数据存储在一个变量中,然后从 Highcharts 代码的“数据”资源中指向这个变量。
    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多