Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Postgres NOSQL/json数据中搜索和选择_Json_Postgresql - Fatal编程技术网

从Postgres NOSQL/json数据中搜索和选择

从Postgres NOSQL/json数据中搜索和选择,json,postgresql,Json,Postgresql,有人能帮我搜索Postgres数据库的json数据类型吗 我有一个表saytransactions,包含以下类似数组的值: 列:“数据”数据类型:json 单个演示事务: { "id": "tran_54645bcb98ba7acfe204", "amount": 4200, ... "fees": [ { "type": "application", "application": "app_1d70

有人能帮我搜索Postgres数据库的json数据类型吗

我有一个表say
transactions
,包含以下类似数组的值:

列:“数据”数据类型:json

单个演示事务:

{
    "id": "tran_54645bcb98ba7acfe204",
    "amount": 4200,
    ...
    "fees": [
        {
            "type": "application",
            "application": "app_1d70acbf80c8c35ce83680715c06be0d15c06be0d",
            "payment": "pay_917018675b21ca03c4fb",
            "amount": 420,
            "currency": "EUR",
            "billed_at": null
        }
    ]
}
嵌套事务列表:

[
    {
        "id": "tran_54645bcb98ba7acfe204",
        "amount": 4200,
        "fees": [
            {
                "type": "application",
                "application": "app_1d70acbf80c8c35ce83680715c06be0d15c06be0d",
                "payment": "pay_917018675b21ca03c4fb",
                "amount": 420,
                "currency": "EUR",
                "billed_at": null
            }
        ]
    },
    {
        "id": "tran_98645bcb98ba7acfe204",
        "amount": 4200,
        "fees": [
            {
                "type": "application",
                "application": "app_1d70acbf80c8c35ce83680715c06be0d15c06be0d",
                "payment": "pay_917018675b21ca03c4fb",
                "amount": 120,
                "currency": "AUD",
                "billed_at": null
            }
        ]
    }
]
如果我想获得所有交易的
amount>300
currency=EUR
我如何才能获得它们? 我是Postgres新手,因此需要帮助了解Postgres nosql的查询构建,特别是对于嵌套JSON数组中的单个元素,使用PHP进行查询构建:

SELECT *
FROM   transactions
WHERE (data #>> '{fees,0,amount}')::numeric > '300'
AND   (data #>> '{fees,0,currency}') = 'EUR';
对于包含更多元素的阵列,您需要做更多的工作。
这本手册是关于

由于您使用的是Postgres 9.4:With
jsonb
,因此会有更好的选项,特别是对于多个数组元素:

要获得您在评论中要求的金额,请执行以下操作:

SELECT sum((data #>> '{fees,0,amount}')::numeric) AS sum_amount
FROM   ...

博士后版本?表格定义?此外,也没有“postgre”这样的东西。请修改。我有9.4版本,您可以考虑表定义如下:<代码>表名:事务栏:数据< /代码>,所以您使用的是<代码> JSON<代码>,而不是<代码> JSONB?在您的示例中,嵌套JSON数组中只有一个项。情况总是这样吗?不,不会总是这样。它将是一个大数据和多个阵列。这只是一个演示交易,我已经展示了没有更多的问题,我可以根据上述查询获得所有金额>300的合计金额(金额)吗