[英]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);
這允許你將pg
與Promise
一起使用。 詳細信息此處手動宣傳與Bluebird的pg.connect
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.