如何在json数据上编写postgres查询以检查特定条件

如何在json数据上编写postgres查询以检查特定条件,json,postgresql,Json,Postgresql,我正在开发一个使用postgres数据库的房地产应用程序。我需要在json字段中查询特定的条件,但我不知道该怎么做 json数据存储在一个名为“conditions”的列中。例如,买方可能具有以下条件: { "subject to financing": {"date": "2020-05-30", "time": "2100", "done": true}, "inspection": {"date": "2020-05-30", "time": "2100", "done":

我正在开发一个使用postgres数据库的房地产应用程序。我需要在json字段中查询特定的条件,但我不知道该怎么做

json数据存储在一个名为“conditions”的列中。例如,买方可能具有以下条件:

{
    "subject to financing": {"date": "2020-05-30", "time": "2100", "done": true},
    "inspection": {"date": "2020-05-30", "time": "2100", "done": true},
    "be my friend": {"date": "2020-05-30", "time": "2100", "done": true}
}
我想写一个查询,检查是否满足所有条件。在上述情况下,这意味着在所有条件中循环,并检查它们的“done”属性是否为true


如何使用json数据编写这样的查询?谢谢。

如果条件不存在,您可以这样做

select t.*
from the_table t
where not exists (select *
                  from jsonb_each(t.conditions) as c(k,val)
                  where (c.val -> 'done')::boolean = false)

子查询迭代所有键/值对(外部查询中的每一行),并检查是否没有任何键/值对被设置为false。。。这似乎奏效了。如果我对它稍加改进以检测json对象中何时不存在“done”,我将如何添加它?使用
而不是c.val“完成”