在NodeJS中使用PostgreSQL JSON类型的最佳方法是什么
我在这里面临一些分析瘫痪。使用NodeJS编程数据库的选项太多了,我有点不知所措 我正在使用Express构建一个API服务器,它将与手机上的HTML5应用程序进行对话。我决定使用PostgreSQL,因为我的数据是“非常相关的”,PostgreSQL新的JSON数据类型将使我的生活更加轻松 不幸的是,我找不到任何利用新JSON数据类型或公开它的PostgreSQL库。我考虑使用并拥有一个好的ORM,或者通过使用原始pgsql模块来滚动我自己的东西 有人能提供线索吗?我会在一些NodeJS stackexchange上问这个问题,但我认为我们没有这样具体的问题。我喜欢。它是积极发展的,只是一个很好的薄层 要在准备好的查询中使用json类型,只需将您试图存储为json的内容字符串化即可(这正是postgres所希望的)。使用pg扩展对我来说非常有用。是将PostgreSQL与Node JS一起使用的最简单方法,Node JS通过承诺进行扩展,用于自动连接和事务。对数据和数据都有很好的支持 您不必使用任何技巧来解析/字符串化json数据。这一切都是自动完成的。您可以声明模式以允许验证要放入数据库等的数据 可以将嵌套的关系对象层次结构插入到数据库中,将生成行以更正表,并且您有javascript API来查询JSON列中的数据,因此也无需为此编写原始SQL 编辑: 不知道为什么在这里投票(目前为-2),在NodeJS中使用PostgreSQL JSON类型的最佳方法是什么,json,node.js,postgresql,Json,Node.js,Postgresql,我在这里面临一些分析瘫痪。使用NodeJS编程数据库的选项太多了,我有点不知所措 我正在使用Express构建一个API服务器,它将与手机上的HTML5应用程序进行对话。我决定使用PostgreSQL,因为我的数据是“非常相关的”,PostgreSQL新的JSON数据类型将使我的生活更加轻松 不幸的是,我找不到任何利用新JSON数据类型或公开它的PostgreSQL库。我考虑使用并拥有一个好的ORM,或者通过使用原始pgsql模块来滚动我自己的东西 有人能提供线索吗?我会在一些NodeJS st
objective.js仍然是节点世界中对Postgresql JSONB操作的最佳支持(也是当前答案中唯一的选择,它对Postgresql JSONB处理有任何特殊支持)
最新添加的功能是只支持修补JSONB列中的部分数据,Objective.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]')])
或
甚至连连接都没有
.join('PetTable',
ref('PetTable.jsonColumn:details.name'),
'=',
ref('ThisTable.someOtherJsonbColumn:dogName'))
我也搜索了这个问题的答案,并在相关问题中找到了类似的解决方案
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
s一起使用。这里的详细信息我使用sequelize,将JSON字符串化,然后解析出来。我喜欢这个设置。使用mongo和mongoose时更是如此。使用sequelize,您将无法查询jsonb列中包含某些数据的行,也无法仅修补jsonb列中的某些字段。长期以来不受支持且不可用。
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);