将 PostgreSQL JSON 类型与 NodeJS 一起使用的最佳方法是啥

     2023-03-08     74

关键词:

【中文标题】将 PostgreSQL JSON 类型与 NodeJS 一起使用的最佳方法是啥【英文标题】:What is the best way to use PostgreSQL JSON types with NodeJS将 PostgreSQL JSON 类型与 NodeJS 一起使用的最佳方法是什么 【发布时间】:2014-04-16 23:23:46 【问题描述】:

我在这里面临一些分析瘫痪。使用 NodeJS 编程数据库的选择太多了,我有点迷失了。

我正在使用 Express 构建一个 API 服务器,它将与移动设备上的 HTML5 应用程序通信。我决定使用 PostgreSQL,因为我的数据“非常相关”,而 PostgreSQL 新的 JSON 数据类型将使我的生活变得更轻松。

不幸的是,我找不到任何 PostgreSQL 库利用新的 JSON 数据类型或公开它。我考虑过使用 Sequelize 并拥有一个不错的 ORM 或使用原始 pgsql 模块滚动我自己的东西。

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

【问题讨论】:

我使用 sequelize 并将 JSON 字符串化并解析出来。我喜欢这个设置。当我使用 mongo 和 mongoose 时更是如此。 使用 sequelize,您将无法查询 jsonb 列中包含某些数据的行,也无法仅修补 jsonb 列中的某些字段。 【参考方案1】:

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

要在准备好的查询中使用 json 类型,只需 JSON.stringify 尝试存储为 json 的任何内容(这就是 postgres 想要的方式)。

【讨论】:

【参考方案2】:

Objection.js 对relational 数据和JSONB 数据有很好的支持。

您不必做任何技巧来解析/字符串化 json 数据。这一切都是自动完成的。您可以声明模式以允许验证您将要放入数据库等的数据。

可以将嵌套的关系对象层次结构插入数据库,并生成行以更正表,并且您有 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'))

【讨论】:

【参考方案3】:

Any-db 带有 pg 扩展名非常适合我。

【讨论】:

这些天长期不受支持和无法使用。【参考方案4】:

pg-promise 是将 PostgreSQL 与 Node JS 结合使用的最简单方法,它通过 Promise 扩展了 node-postgres,用于自动连接和事务。

【讨论】:

【参考方案5】:

我也搜索了这个问题的答案,并在相关问题中找到了类似的解决方案。

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);

这允许您将pgPromises 一起使用。详情看这里Manually promisifying pg.connect with Bluebird

【讨论】:

将 json 对象存储到 postgresql 中的数据类型是啥?

】将json对象存储到postgresql中的数据类型是啥?【英文标题】:Whatisthedatatypetostorejsonobjectintopostgresql?将json对象存储到postgresql中的数据类型是什么?【发布时间】:2019-03-0518:04:47【问题描述】:我对postgresql很陌生。我想将下面的... 查看详情

PostgreSQL 9.2 - 将 TEXT json 字符串转换为 json/hstore 类型

】PostgreSQL9.2-将TEXTjson字符串转换为json/hstore类型【英文标题】:PostgreSQL9.2-ConvertTEXTjsonstringtotypejson/hstore【发布时间】:2013-04-1804:14:48【问题描述】:我有一个包含有效JSON字符串的TEXT列。CREATETABLEusers(settingsTEXT);INSERTINTOusersVALUES(\... 查看详情

如何使用表内的 JSONB 数据类型和 PostgreSQL JDBC 驱动程序将 JSON 对象存储到 PostgreSQL

】如何使用表内的JSONB数据类型和PostgreSQLJDBC驱动程序将JSON对象存储到PostgreSQL【英文标题】:HowtostoreJSONobjectintoPostgreSQLusingJSONBdatatypeinsidetableandPostgreSQLJDBCdriver【发布时间】:2019-12-0719:38:43【问题描述】:我想将以下json对象保存... 查看详情

将 Spring Data 与 PostgreSQL JsonB 类型属性一起使用

】将SpringData与PostgreSQLJsonB类型属性一起使用【英文标题】:UsingSpringDatawithPostgreSQLJsonBtypeproperties【发布时间】:2021-07-2721:27:08【问题描述】:我很难在SpringData中使用带有JsonB数据类型的PostgreSQL。我有下表:createtablemytable(...MYDATA... 查看详情

是否可以将 Hibernate 与 PostgreSql 的 JSONB 数据类型一起使用?

】是否可以将Hibernate与PostgreSql的JSONB数据类型一起使用?【英文标题】:IsitpossibletouseHibernatewithPostgreSql\'sJSONBdatatype?【发布时间】:2018-08-2519:39:58【问题描述】:Hibernate5默认不支持PostgreSQLjsonb数据类型。有没有办法实现jsonb对Hib... 查看详情

将 PostgreSQL JSON 列映射到 Hibernate 实体属性

】将PostgreSQLJSON列映射到Hibernate实体属性【英文标题】:MappingPostgreSQLJSONcolumntoaHibernateentityproperty【发布时间】:2013-04-0503:57:05【问题描述】:我的PostgreSQL数据库(9.2)中有一个包含JSON类型列的表。我很难将此列映射到JPA2实体字段... 查看详情

如何在 Django 中使用 PostgreSQL 9.2 JSON 数据类型?

】如何在Django中使用PostgreSQL9.2JSON数据类型?【英文标题】:HowdoIusePostgreSQL9.2JSONdatatypeinDjango?【发布时间】:2012-09-0607:50:21【问题描述】:PostgreSQL9.2支持原生json数据类型。如何创建可以将此数据类型用作模型字段之一的django模... 查看详情

如何使用 PySpark 将 JSON 列类型写入 Postgres?

...rk?【发布时间】:2017-09-0704:37:21【问题描述】:我有一个Postgresql表,其中有一列数据类型为JSONB。如何通过JDBC将DataFrame插入Postgresql表?如果我有一个UDF将body列转换为JSONBPostgresql数据类型,我应 查看详情

PostgreSQL 中 JSON 数据类型的大小限制

】PostgreSQL中JSON数据类型的大小限制【英文标题】:SizelimitofJSONdatatypeinPostgreSQL【发布时间】:2012-09-2802:37:44【问题描述】:有人知道PostgreSQL9.2中JSON数据类型的大小有什么限制吗?【问题讨论】:【参考方案1】:查看PostgreSQL9.2.... 查看详情

在 postgresql 中识别 json 类型

】在postgresql中识别json类型【英文标题】:Identifyjsontypeinpostgresql【发布时间】:2021-12-0204:26:34【问题描述】:是否有一个函数或方法可以轻松确定postgresql中的json数据类型?例如:selectkey,value,pg_typeof(value)FROMjsonb_each(\'"foo":1,"bar":"... 查看详情

如何将 PostgreSQL 9.4 的 jsonb 类型转换为浮点型

】如何将PostgreSQL9.4的jsonb类型转换为浮点型【英文标题】:HowtoconvertPostgreSQL9.4\'sjsonbtypetofloat【发布时间】:2014-07-1813:37:53【问题描述】:我正在尝试以下查询:SELECT(json_data->\'position\'->\'lat\')+1.0ASlatFROMupdatesLIMIT5;(+1.0只是... 查看详情

检查 json 类型列 PostgreSQL 中是不是存在字段

】检查json类型列PostgreSQL中是不是存在字段【英文标题】:CheckiffieldexistsinjsontypecolumnPostgreSQL检查json类型列PostgreSQL中是否存在字段【发布时间】:2013-10-1708:58:22【问题描述】:如何检查Postgres中的json字段是否具有特定元素?我用... 查看详情

如何在 postgresql 中对 json 类型使用唯一约束

】如何在postgresql中对json类型使用唯一约束【英文标题】:Howtouseuniqueconstraintforjsontypeinpostgresql【发布时间】:2018-11-0505:17:42【问题描述】:如何在postgresql中为“json”列设置唯一约束?唯一对我来说意味着:如果每个键匹配并且... 查看详情

如何在 Postgresql 中添加、更新和删除 Json 数据类型?

】如何在Postgresql中添加、更新和删除Json数据类型?【英文标题】:HowToAdd,UpdateAndDeleteFromJsonDataTypeOnPostgresql?【发布时间】:2022-01-1712:53:35【问题描述】:这是我在PostgreSQL上的表格,带有联系人姓名:我想用这个sql查询编辑mobile1... 查看详情

在 Flask-sqlalchemy 和 Postgresql 中使用 JSON 类型

】在Flask-sqlalchemy和Postgresql中使用JSON类型【英文标题】:UsingJSONTypewithFlask-sqlalchemy&Postgresql【发布时间】:2014-07-1516:42:45【问题描述】:背景:我正在构建一个Flask应用程序,并且我已将我的数据存储到一个postgresql数据库和一... 查看详情

Sequelize:在 PostgreSQL 的 JSON 数据类型上使用 $like

】Sequelize:在PostgreSQL的JSON数据类型上使用$like【英文标题】:Sequelize:use$likeonJSONdatatypewithPostgreSQL【发布时间】:2016-02-1212:47:38【问题描述】:我在PostgreSQL中使用Sequelize。我需要构建一个销毁查询,该查询可以在JSON数据类型上... 查看详情

如何修改新 PostgreSQL JSON 数据类型中的字段?

】如何修改新PostgreSQLJSON数据类型中的字段?【英文标题】:HowdoImodifyfieldsinsidethenewPostgreSQLJSONdatatype?【发布时间】:2013-08-1502:24:55【问题描述】:使用postgresql9.3我可以SELECTJSON数据类型的特定字段,但是如何使用UPDATE修改它们?... 查看详情

如何在 laravel 中获取 PostgreSQL 的 JSON 类型数据?

】如何在laravel中获取PostgreSQL的JSON类型数据?【英文标题】:HowtogetPostgreSQL\'sJSONtypedatainlaravel?【发布时间】:2017-02-1216:30:28【问题描述】:我创建了表格--Table:public.books--DROPTABLEpublic.books;CREATETABLEpublic.books(idinteger,datajson)WITH(OIDS=F 查看详情