我在这里面临一些分析瘫痪。使用NodeJS编程数据库有很多选择,我有点迷失。
我正在使用Express构建一个API服务器,它将与移动设备上的HTML5应用程序通信。我决定使用PostgreSQL,因为我的数据是"非常关系"和PostgreSQL新的JSON数据类型将使我的生活更轻松。
不幸的是,我无法找到PostgreSQL的任何库来利用新的JSON数据类型或公开它。我考虑过使用Sequelize并使用原始的pgsql模块编写一个很好的ORM或滚动自己的东西。
有人能说清楚吗?我在一些NodeJS堆栈交换中问这个问题,但我认为我们没有具体的那个。
答案 0 :(得分:8)
我喜欢https://github.com/brianc/node-postgres。它积极开发,只是一个很好的薄层。
要在准备好的查询中使用json类型,只需要JSON.stringify
无论你想要存储为json(无论如何都是postgres想要它)。
答案 1 :(得分:3)
Objection.js非常支持relational数据以及JSONB数据。
您无需执行任何技巧来解析/字符串化json数据。这一切都是自动完成的。您可以声明模式以允许验证您将要放置数据库等的数据。
可以将嵌套的关系对象层次结构插入到DB中,并生成行以更正表,并且您可以使用javascript API查询JSON列中的数据,因此无需为此编写RAW SQL。
编辑:
不知道为什么在这里投票(当前为-2),Objection.js
仍然对节点世界中Postgresql的JSONB操作有最好的支持(当前答案中唯一的选择,对postgresql有任何特殊支持) jsonb处理)。
最新增加的是支持在JSONB列中仅修补部分数据,其中objection.js会自动为您构建jsonb_set()
次调用。
例如:
ModelWithJsonColumn.query().update({
'jsonColumn:attribute' : 'new value',
otherColum: ref('jsonColumn:extractThisAttribute')
}).where('id', 1).returning('*')
将创建如下的更新查询:
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'))
答案 2 :(得分:0)
Any-db对我来说很有用。
答案 3 :(得分:-1)
pg-promise是使用PostgreSQL和Node JS的最简单方法,它使用promises扩展node-postgres,用于自动连接和事务。
答案 4 :(得分:-3)
我也搜索了这个问题的答案,并在相关问题中找到了类似的解决方案。
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);
这允许您将pg
与Promise
一起使用。详情请Manually promisifying pg.connect with Bluebird