Node 中的 postgres+jsonb 使用什么库?

mar*_*768 3 postgresql node.js jsonb

我想对包含对象数组的 jsonb/documents 进行更复杂的查询。有没有人推荐 Node 的库?我正在使用pg,但我想做更高级的查询,例如选择文档,其中文档具有一个数组,其中包含具有特定键/值的对象。如果没有任何库可以做到这一点,有谁知道我如何在 psql 中使用 json 函数/等来做到这一点?或者向我指出一本可以学习这种高级查询的书籍/资源?

dmf*_*fay 5

如果您需要做非常复杂的事情,无论如何您都会编写 SQL。但对于涉及使用 JSONB 字段的基本查询Massive(完全公开,这是我的项目)已经涵盖了,并且执行手写的准备好的语句与其他任何操作一样简单,因为脚本已加载到 API 中。

不幸的是,搜索嵌入数组属于“非常复杂”的类别,但如果您知道元素位置,则可以使用 Massive 非常简单地完成此操作:

await db.mytable.find({
  'somejson.arrayfield[0].key': 'value'
});
Run Code Online (Sandbox Code Playgroud)

这将返回mytablesomejson列具有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'). 您也可以使用文件夹对类似的脚本进行分组。