我想对包含对象数组的jsonb /文档进行更复杂的查询。是否有人会推荐Node?我正在使用pg
,但我想做更多高级查询,例如选择文档中包含具有特定键/值的对象的数组的文档。如果没有任何库可以执行此操作,是否有人知道如何使用psql中的json函数/ etc来完成它?或者指向一本书/资源,在那里我可以学习这种高级查询?
答案 0 :(得分:3)
如果您需要执行真正复杂的事情,那么无论如何都要编写SQL。但是对于涉及使用JSONB字段Massive的基本查询(完全公开,它是我的项目),您可以覆盖,并且执行手写预准备语句就像其他任何内容一样简单,因为脚本被加载到API中。
搜索嵌入式阵列属于“非常复杂”的问题。不幸的是,如果你知道你的元素位置,那么你可以用Massive完成这个:
await db.mytable.find({
'somejson.arrayfield[0].key': 'value'
});
这将返回mytable
所有somejson
列都有arrayfield
数组的记录,其中第一个元素包含"key": "value"
对。
要进行搜索,请查看Postgres docs。您遇到的具体问题需要在jsonb_array_elements
函数上进行横向连接,如下所示:
SELECT somejson
FROM mytable
JOIN LATERAL jsonb_array_elements(mytable.somejson->'arrayfield') AS elements
ON TRUE
WHERE elements->>'key' = $1;
使用Massive,您可以将此查询放在应用程序&db目录中的脚本中,并将其作为db.myScriptName('value')
运行。您也可以使用文件夹对类似的脚本进行分组。