2016-02-05 23 views
0

我想知道在我的Sails.js + PostgreSQL應用程序中使用什麼ORM(或其他解決方案)。基本規則是它支持jsonb數據類型。不幸的是Waterline沒有(bottom of the page),所以我不得不四處尋找解決方法。該應用程序是一個具有非常特定目的和功能的MicroService,並不會是巨大或超複雜的。哪個ORM支持JSONB比Sails更好

我偶然發現了一些可以集成的API:BedquiltDBPostgREST,但這些看起來像是爲了滿足我的需求。所以,我對使用任何這種類型的解決方案持懷疑態度。

然後我偶然發現SequelizeBookshelfwith Knex)。還有其他一些選擇,但這兩個看起來像是最受歡迎和最常用的選項。這裏是我的基本點向兩個選項:

Sequelize

  • 據說有弱勢羣體,很難找到答案,但這樣它 具有X2將q &水線的
  • 說當你的項目有複雜的實體關係(如果這意味着「比平常更多的外鍵」,那麼我可以說我不會在我的數據庫設置中有這個)
  • 說有良好的文檔,但只爲基礎..但我可以找到基本上所有的基本和關係查詢,通常會使用的方法,所以我沒有看到在這裏的文檔的消極方面。
  • 支持jsonb開箱,基本上我需要的任何其他類型
  • 我喜歡文檔 - 它非常詳細。而且我發現如何輕鬆地將它與帆

書架

  • 建立在KnexJS,這似乎是一個功能強大的查詢構建器集成TUTS。基本上,您需要安裝Knex才能安裝Bookshelf,所以您始終都有。這在我看來是一個缺點,因爲我將不得不使用ORM +查詢構建器,而不是單個ORM,以滿足我所有的需求。
  • 支持jsonb(因爲Knex)
  • 我真的不喜歡書架的文檔。模型聲明(各種情況)的示例不夠好。
  • 已經少得多了Q &在SO中,與Sequelize相比。那麼,看起來社區比較弱?

我在相當一些論壇上挖了一下,並且給人的印象是大多數人都喜歡Sequelize前面的Bookshelf,儘管我看不到它。

我寫的一些觀點實際上可能並不正確,所以我要求提供更多關於您使用哪種解決方案的意見?除了提到的那些外,都是受歡迎的,只要有關於爲什麼使用它們的事實。

回答

2

兩個ORM都採用完全不同的方式來解決問題。Knex + Bookshelf更多的是基於ORM的查詢生成器。根據您的要求,您將得到相當不錯的支持來生成查詢。這就是說knex有更多的「自由」來產生複雜的查詢。 Bookshelf也支持JSONB。

Sequelize另一方面嘗試通過JavaScript基於對象的查詢形成來解決問題。它也支持JSONB。它有很好的文檔。 Sequelize只在生成複雜查詢的領域缺乏。例如一些issues。但是它擁有更大的社區並且與書架相比非常活躍。

我一直在使用Sequelize許多項目,它從來沒有給我任何問題。兩個ORM都很好。兩者都支持JSONB。這取決於你想要遵循哪種風格。

並且記住,如果卡住了,您總是可以編寫原始查詢。

+0

Sequelize和Knex不支持完整的函數postgresql 9.6 JSONB函數https://www.postgresql.org/docs/9.6/static/functions-json.html – stackdave