簡體   English   中英

使用NodeJS的PostgreSQL JSON類型的最佳方法是什么

[英]What is the best way to use PostgreSQL JSON types with NodeJS

我在這里面臨一些分析癱瘓。 使用NodeJS編程數據庫有很多選擇,我有點迷失。

我正在使用Express構建一個API服務器,它將與移動設備上的HTML5應用程序通信。 我決定使用PostgreSQL,因為我的數據是“非常關系”的,而PostgreSQL新的JSON數據類型將使我的生活更輕松。

不幸的是,我找不到PostgreSQL的任何庫利用新的JSON數據類型或暴露它。 我想過使用Sequelize和一個很好的ORM或使用raw pgsql模塊滾動我自己的東西。

有人能說清楚嗎? 我在一些NodeJS stackexchange上問過這個問題,但我認為我們沒有具體的那個。

我喜歡https://github.com/brianc/node-postgres 它是積極開發的,只是一個很好的薄層。

要在准備好的查詢中使用json類型,只需將JSON.stringify設置為json(無論如何都是postgres想要的)。

Objection.js非常支持關系數據和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'))

帶有pg擴展名的Any-db對我來說很有用。

pg-promise是使用PostgreSQL和Node JS的最簡單方法,它使用promises擴展node-postgres ,用於自動連接和事務。

我也搜索了這個問題的答案,並在相關問題中找到了類似的解決方案。

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一起使用。 詳細信息此處手動宣傳與Bluebird的pg.connect

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM