第7章-使用ORM類庫Mongoose提升你的Node.js數據-7.5.Mongoose模型

就像在很多其他ORM中一樣,在Mongoose中,模型都是最基礎的對象。
將原型編譯爲一個模型,使用mongoose.model(name, schema)即可
如:

var Book = mongoose.model('Book', bookSchema);

第一個參數是一個字符串,我們可以使用它來調用這個實例。
通常,這個字符串和模型的變量名一致(例如:Book)

我們可以使用new ModeName(data)這樣的代碼來創建文檔,例如:

var practicalNodeBook = new Book({name: 'Practical Node.js'});
var javascriptTheGoodPartsBook = new Book({name: 'JavaScript The Good Parts'});

一、通過構造函數賦初值,少使用set方法,減少函數調用

相比使用document.set()方法來說,最好通過構造器來指定初始值,因爲這樣Mongoose可以少處理一些函數調用,同時我們的代碼也會更緊湊、更有層次。
當然,前提是當我們創建實例時知道這些屬性的值。

不要混淆靜態方法和實例方法。
當我們調用practicalNodeBook的一個方法,這是實例方法;當我們調用Book對象的方法,則是靜態類方法。

模型有一些內建的靜態方法同Mongoskin以及原生MongoDB方法類似,例如:find()、create()和update()。

二、Mongoose內置靜態方法

1.Model.create(data, [callback(error, doc)]):創建一個新的Mongoose文檔並保存到數據庫
2.Model.remove(query, [callback(error)]):刪除集合中與查詢條件匹配的文檔。當完成時,調用帶error參數的回調函數。
3.Model.find(query, [fields], [options], [callback(error, docs)]):查找與查詢條件(JSON對象)匹配的文檔
4.Model.update(query, update, [options], [callback(error, affectedCount, raw)]):更新文檔,與本地更新類似
5.Model.populate(docs, options, [callback(error, doc)]):使用其他集合的引用來填充文檔;這是替換的另一種說法
6.Model.findOne(query, [fields], [options], [callback(error, doc)]):查找第一個與查詢條件匹配的文檔
7.Model.findById(id, [fields], [options], [callback(error, doc)]):查找第一個_id值與id參數相同的元素(id根據原型進行類型轉換)
8.Model.findOneAndUpdate([query], [update], [options], [callback(error, doc)]):查找第一個和查詢條件匹配的文檔然後更新他,並且返回這個文檔對象;同類型的方法是findAndModify
9.Model.findOneAndRemove(query, [options], [callback(error, doc)]):查找第一個和查詢條件匹配的文檔然後刪除他,並且返回這個文檔對象
10.Model.findByIdAndUpdate(id, [update], [options], [callback(error, doc)]):和findOneAndUpdate類似,但是隻用ID來匹配

注:並不是所有的Mongoose模型方法都會觸發鉤子。
其中一些方法是直接執行。例如,調用Model.remove()方法並不會觸發remove這個鉤子,因爲沒有Mongoose文檔被涉及。
Model的實例名一般用首字母小寫的字符串表示。

三、常用方法列舉

1.doc.model(name):返回另一個Mongoose模型
2.doc.remove([callback(error, doc)]):刪除這個文檔
3.doc.save([callback(error, doc, affectedCount)]):保存這個文檔
4.doc.update(doc, [options], [callback(error, affectedCount, raw)]):使用doc屬性以及options參數更新文檔,直到完成更新時觸發一個帶有error、affectedCount的數量以及輸出的數據庫參數的回調函數
5.doc.toJSON([option]):將一個Mongoose文檔轉爲JSON對象
6.doc.toObject([option]):將一個Mongoose文檔轉爲純的JavaScript對象
7.isModified([path]):用來判斷文檔的某些部分(或者具體的字段)是否修改過,分別返回true或false
8.markModified(path):手動標記一個字段爲修改過,這對於混合數據類型(Schema.Types.Mixed)很有用,因爲混合類型不會自動觸發標記修改
9.doc.isNew:判斷一個文檔是否爲新建的,分別返回true或false
10.doc.id:返回文檔的ID
11.doc.set(path, value, [type], [options]):設置一個path的value
12.doc.validate(callback(error)):手動進行驗證(在save()之前自動觸發)

toObject()和toJSON()的可配置的參數清單如下:
1.getters:是否對所有字段進行轉換(包括虛擬字段),分別返回true或false
2.virtuals:是否對虛擬字段進行轉換,重寫該字段的配置選項
3.minimize:刪除空屬性和空對象(默認值是true),分別返回true或false
4.transform:在返回對象之前執行這個轉換函數

發佈了305 篇原創文章 · 獲贊 5 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章