1. 程式人生 > >Mongoose(一):為什麼選擇Mongoose

Mongoose(一):為什麼選擇Mongoose

如果想要在NodeJS中連線MongoDB,可以選擇直接使用mongodb為NodeJS寫的驅動包,但我更推薦使用一個比較成熟的中介軟體:Mongoose。

官方定義

Mongoose: elegant mongodb object modeling for node.js

Mongoose:優雅地在NodeJS中進行MongoDB物件建模

Let’s face it, writing MongoDB validation, casting and business logic boilerplate is a drag. That’s why we wrote Mongoose.

我們開發Mongoose是因為(開發者)寫MongoDB的驗證機制、型別轉換與業務邏輯模板很麻煩。
(譯註:所以Mongoose想簡化這些步驟,使得MongoDB更加易用、安全、穩定。)

Mongoose provides a straight-forward, schema-based solution to model your application data. It includes built-in type casting, validation, query building, business logic hooks and more, out of the box.

針對為應用資料建模的問題,Mongoose 提供了一套直白的,基於模式的解決方案。包括了內建的型別轉換、驗證器、查詢構造器、業務邏輯鉤子等。
(譯註:鉤子是指事件式程式設計中留給開發者程式設計的事件函式,如“當新增XXX後觸發事件”,也稱為觸發器Trigger)

型別體系

MongoDB自身的資料格式是BSON,有基本的型別體系。Mongoose在其上針對業務需求,實現了更多的型別,以及使用者自定義類,這使得資料建模變得更加靈活。

驗證機制

由於MongoDB是一種Schema-less的資料庫——它允許在一個集合中存在各式各樣不同形狀的文件。這樣的異質性在存在人機互動的系統中並不完全是一件好事。惡意(或者手殘)的使用者可能很容易就能在你的資料庫裡面注入一些其他與本系統不相關的資料。

因此,對資料的驗證(Validation)就很重要,而在資料庫底層支援這些又很麻煩,因為驗證邏輯可能是很複雜而且可能會依賴於資料庫之外的東西。

所以,在資料入庫之前就對資料進行驗證以保證資料模式的一致性是比較靠譜的做法,Mongoose有比較完善的驗證機制,使用者可以非常方便地編寫自定義驗證函式來適應各種需要。

查詢構造

查詢構造器是一個構造MongoDB查詢語句的東西,本質上是字串拼接。但它做了更多的事情來防止被SQL注入,利用prepare機制來防止惡意使用者通過注入點做一些奇奇怪怪的事情。

另外,構造器的設計對面向物件程式設計的程式設計師來說非常友好。

業務邏輯鉤子

其實我更喜歡用觸發器(Trigger)來描述它。
Mongoose對MongoDB底層的觸發器做了一層封裝,可以用事件驅動事件。

如:“當新建一個文件後,做一件事”這樣的需求,可以用Mongoose來管理這樣一個邏輯。

小結

Mongoose的地位是位於MongoDB與NodeJS之間的,看上去是增加了一些複雜度,但實際上卻做了很多抽象,大大簡化了使用MongoDB的難度。

在學習MongoDB的時候,Mongoose也是一個很好的參考資料。