使用NodeJS的PostgreSQL JSONtypes的最佳方式是什么?

我在这里面临一些分析瘫痪。 使用NodeJS编程数据库有太多的select,我有点遗憾。

我正在使用Express来构build一个API服务器,该服务器将与移动设备上的HTML5应用程序通信。 我决定使用PostgreSQL,因为我的数据是“非常关系的”,PostgreSQL的新的JSON数据types将使我的生活变得更加容易。

不幸的是,我找不到任何PostgreSQL的库来利用新的JSON数据types或暴露它。 我想过使用Sequelize和有一个很好的ORM或通过使用原始pgsql模块滚动我自己的东西。

有人可以提供线索吗? 我会问一些NodeJS stackexchange,但我不认为我们有一个具体的这一点。

我喜欢https://github.com/brianc/node-postgres 。 它积极发展,只是一个很好的薄层。

要在准备好的查询中使用jsontypes,只需要JSON.stringify你试图存储为json的任何东西(这就是postgres想要的)。

pg-promise是使用PostgreSQL和Node JS的最简单的方法,它使用承诺扩展node-postgres来实现自动连接和事务处理。

Objection.js对关系数据和JSONB数据都有很好的支持。

你不必做任何技巧来parsing/串化JSON数据。 这一切都是自动完成的。 您可以声明模式以允许validation您要放入数据库的数据

可以将嵌套的关系对象层次结构插入到数据库中,并且将生成行来更正表格,并且您有javascript API来查询JSON列中的数据,因此不需要为此编写RAW SQL。

编辑:

不知道为什么在这里投票(当前为-2), Objection.js仍然对节点世界中的PostgreSQL的JSONB操作有最好的支持(也是当前答案的唯一select,它对postgresql jsonb处理有特别的支持)。

最新增加的内容是支持仅修补JSONB列中的部分数据,其中objection.js自动为您构buildjsonb_set()调用。

例如:

 ModelWithJsonColumn.query().update({ 'jsonColumn:attribute' : 'new value', otherColum: ref('jsonColumn:extractThisAttribute') }).where('id', 1).returning('*') 

将会像这样创build更新查询:

 update "ModelWithJsonColumn" set "jsonColumn" = jsonb_set("jsonColumn", '{attribute}', to_jsonb('new value'), true), "otherColumn" = "jsonColumn"#>'{extractThisAttribute}' where "id" = 1 returning * 

也可以在几乎所有的查询生成器方法中使用ref()语法

 .select(['id', ref('jsonArrayColumn:[0]')]) 

要么

 .where('name', ref('jsonColumn:middleName')) 

甚至连接

 .join('PetTable', ref('PetTable.jsonColumn:details.name'), '=', ref('ThisTable.someOtherJsonbColumn:dogName')) 

any-db与pg扩展名正在为我工​​作。

我也search了这个问题的答案,并find类似的相关问题的解决scheme。

 var pg = require("pg"); var Promise = require("bluebird"); Object.keys(pg).forEach(function(key) { var Class = pg[key]; if (typeof Class === "function") { Promise.promisifyAll(Class.prototype); Promise.promisifyAll(Class); } }) Promise.promisifyAll(pg); 

这允许你使用pgPromise s。 详情在这里手动promisifying蓝鸟pg.connect