mongoose學(xué)習(xí)筆記(node)

Mongoose是在node.js環(huán)境下對mongodb進(jìn)行便捷操作的對象模型工具,因此,要使用mongoose,則必須安裝node.js環(huán)境以及mongodb數(shù)據(jù)庫,mongoose使mongodb操作更簡單便捷。

名詞解釋:

1、Schema: 一種以文件形式存儲(chǔ)的數(shù)據(jù)庫模型骨架,不具備數(shù)據(jù)庫的操作能力
2、Model: 由Schema編譯而成的假想(fancy)構(gòu)造器,具有抽象屬性和行為。Model的每一個(gè)實(shí)例(instance)就是一個(gè)document。document可以保存到數(shù)據(jù)庫和從數(shù)據(jù)庫返回。
3、Instance: 由Model創(chuàng)建的實(shí)例。

步驟:

1、連接MongoDB數(shù)據(jù)庫

connect
connect 用于創(chuàng)建數(shù)據(jù)庫連接
mongoose.connect(uri(s), [options], [callback])
//url(s):數(shù)據(jù)庫地址,可以是多個(gè),以,隔開
//options:可選,配置參數(shù)
//callback:可選,回調(diào)
mongoose.connect('mongodb://數(shù)據(jù)庫地址(包括端口號)/數(shù)據(jù)庫名稱')

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/data',function(err) {
    if(err){
        console.log('數(shù)據(jù)庫連接錯(cuò)誤!');
    }else{
        console.log('數(shù)據(jù)庫連接成功!');   
    }
})

連接多個(gè)數(shù)據(jù)庫
如果你的app中要連接多個(gè)數(shù)據(jù)庫,只需要設(shè)置多個(gè)url以,隔開,同時(shí)設(shè)置mongos為true

mongoose.connect('urlA,urlB,...', {
   mongos : true 
})

2、定義Schema

mongoose中任何任何事物都是從Schema開始的。每一個(gè)Schema對應(yīng)MongoDB中的一個(gè)集合(collection)。Schema中定義了集合中文檔(document)的樣式。( 其實(shí)就是定義表的數(shù)據(jù)結(jié)構(gòu))

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const blogSchema = new Schema({  
    title:  String,  
    author: String,  
    body:   String,  
    comments: [{ body: String, date: Date }],  
    date: { type: Date, default: Date.now },  
    hidden: Boolean, 
    meta: {    votes: Number,    favs:  Number  }
});

字段類型
schema中支持以下字段類型

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array
    如果之后想要在Schema中添加鍵,可以使用Schema#add方法。

schema中不僅僅可以設(shè)置字段類型,同時(shí)還可以設(shè)置默認(rèn)值(default),關(guān)聯(lián)文檔(ref),required等。_一旦設(shè)置了字段類型,如果出現(xiàn)錯(cuò)誤,比如某字段類型為Boolean,而輸入了一個(gè)其他類型,mongoose將會(huì)拋出類型錯(cuò)誤的提示。

3、創(chuàng)造一個(gè)model

Model是由Schema編譯而成的假想(fancy)構(gòu)造器,具有抽象屬性和行為。Model的每一個(gè)實(shí)例(instance)就是一個(gè)document。document可以保存到數(shù)據(jù)庫和對數(shù)據(jù)庫進(jìn)行操作。
//語法
mongoose.model(文檔名稱, Schema,集合名[表名])

mongoose.model(modelName, schema)
const BlogModel = mongoose.model('Blog', blogSchema)
module.exports = BlogModel

4、實(shí)例方法和靜態(tài)方法

Methods 實(shí)例方法
Model的實(shí)例是document。內(nèi)置實(shí)例方法如 save,可以通過methods屬性給實(shí)例自定義擴(kuò)展方法

ArticleSchema.methods.methodFunc = function() {
  // body...
}

Statics 靜態(tài)方法
model的靜態(tài)方法很多,如find,update等,可以通過 statics屬性給 Model 添加自定義擴(kuò)展方法

ArticleSchema.statics.staticFunc = function() {
  // body...
}

Methods 和 Statics 的區(qū)別
statics是給model添加方法,methods是給實(shí)例(instance)添加方法。methods和statics的區(qū)別

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容