mar*_*768 3 postgresql node.js jsonb
我想对包含对象数组的 jsonb/documents 进行更复杂的查询。有没有人推荐 Node 的库?我正在使用pg,但我想做更高级的查询,例如选择文档,其中文档具有一个数组,其中包含具有特定键/值的对象。如果没有任何库可以做到这一点,有谁知道我如何在 psql 中使用 json 函数/等来做到这一点?或者向我指出一本可以学习这种高级查询的书籍/资源?
如果您需要做非常复杂的事情,无论如何您都会编写 SQL。但对于涉及使用 JSONB 字段的基本查询Massive(完全公开,这是我的项目)已经涵盖了,并且执行手写的准备好的语句与其他任何操作一样简单,因为脚本已加载到 API 中。
不幸的是,搜索嵌入数组属于“非常复杂”的类别,但如果您知道元素位置,则可以使用 Massive 非常简单地完成此操作:
await db.mytable.find({
'somejson.arrayfield[0].key': 'value'
});
Run Code Online (Sandbox Code Playgroud)
这将返回mytable该somejson列具有arrayfield数组的所有记录,其中第一个元素包含一"key": "value"对。
要进行搜索,请查看Postgres 文档。您遇到的具体问题需要对jsonb_array_elements函数进行横向连接,如下所示:
SELECT somejson
FROM mytable
JOIN LATERAL jsonb_array_elements(mytable.somejson->'arrayfield') AS elements
ON TRUE
WHERE elements->>'key' = $1;
Run Code Online (Sandbox Code Playgroud)
使用 Massive,您可以将此查询放入应用程序 /db 目录中的脚本中,并将其作为db.myScriptName('value'). 您也可以使用文件夹对类似的脚本进行分组。