您在Node中使用什么库来进行postgres + jsonb?

时间:2018-04-19 12:13:23

标签: node.js postgresql jsonb

我想对包含对象数组的jsonb /文档进行更复杂的查询。是否有人会推荐Node?我正在使用pg,但我想做更多高级查询,例如选择文档中包含具有特定键/值的对象的数组的文档。如果没有任何库可以执行此操作,是否有人知道如何使用psql中的json函数/ etc来完成它?或者指向一本书/资源,在那里我可以学习这种高级查询?

1 个答案:

答案 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')运行。您也可以使用文件夹对类似的脚本进行分组。