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

1. 安裝mongoose

npm install mongoose --save

2.創(chuàng)建mongoose連接

在model文件夾中,創(chuàng)建db.js文件用于創(chuàng)建數(shù)據(jù)庫(kù)的連接對(duì)象瘫寝,然后將創(chuàng)建好的連接對(duì)象曝露出去民鼓。

// 引包
const mongoose = require("mongoose");
//連接數(shù)據(jù)庫(kù)
// mongoose.connect("mongodb://localhost/mongooseDB");
var db=mongoose.createConnection("mongodb://localhost/mongooseDB");
db.once('open',function(callback){
    console.log('數(shù)據(jù)庫(kù)連接ok...');    
})
//將創(chuàng)建連接的對(duì)象曝露出去
module.exports=db;

3. mongoose操作對(duì)象

Mongoose 里矛物,一切都始于Schema,它可以看做是一種架構(gòu)路翻,每一個(gè)創(chuàng)建的架構(gòu)(Schema)都會(huì)映射到MongoDB中collection狈癞,并且創(chuàng)建與Schema相同的結(jié)構(gòu)的文檔(數(shù)據(jù))。
我們繼續(xù)在model文件夾中創(chuàng)建一個(gè)student.js文件茂契,用于搭建學(xué)生的架構(gòu)(Schema)蝶桶,創(chuàng)建完成后我們使用db.model將這個(gè)架構(gòu)映射成一個(gè)學(xué)生模型,最后將這個(gè)模型也導(dǎo)出掉冶。

//引包
var mongoose=require('mongoose');
var db=require('./db')

//創(chuàng)建一個(gè)學(xué)生架構(gòu)
var studentSchema = mongoose.Schema({
    name: {
        type: String,
        default: '匿名用戶'
    },
    age: {
        type: Number
    },
    sex: {
        type: Boolean
    }
})

//將學(xué)生架構(gòu)映射成一個(gè)學(xué)生(Student)模型
var studentModel=db.model('Student',studentSchema);

//將學(xué)生模型曝露出去
module.exports=studentModel;

4. 創(chuàng)建實(shí)例并保存

創(chuàng)建一個(gè)app.js當(dāng)做程序的入口文件真竖,這里引用剛才導(dǎo)出的學(xué)生文件,獲得一個(gè)學(xué)生的模型厌小,然后創(chuàng)建這個(gè)模型對(duì)象恢共,相當(dāng)于實(shí)例化一個(gè)學(xué)生對(duì)象。

var student = require('./model/student')

//創(chuàng)建對(duì)象
var admin= new student({
    name: 'admin',
    age: 33,
    sex: true
});
//保存
admin.save(function () {
    console.log('ok');
})

//創(chuàng)建并保存另一個(gè)對(duì)象
student.create({
    name: 'test',
    age: 18,
    sex: false
})

運(yùn)行測(cè)試

npm app.js

查看數(shù)據(jù)庫(kù)中獲得兩條數(shù)據(jù)

5. 添加幾個(gè)靜態(tài)方法

修改student.js文件璧亚,在其中添加幾個(gè)靜態(tài)方法讨韭,這相當(dāng)于是直接在student架構(gòu)(類型)中直接添加方法,使用時(shí)不需要實(shí)例化對(duì)象,直接通過student來調(diào)用透硝。

//引包
var mongoose = require('mongoose');
var db = require('./db')

//創(chuàng)建一個(gè)學(xué)生架構(gòu)
var studentSchema = mongoose.Schema({
    name: {
        type: String,
        default: '匿名用戶'
    },
    age: {
        type: Number
    },
    sex: {
        type: Boolean
    }
})

//靜態(tài)方法是直接將方法創(chuàng)建到架構(gòu)中去狰闪,直接通過架構(gòu)打點(diǎn)調(diào)用

//添加
studentSchema.statics.addStudent=function(name,age,sex,callback){
    this.model('Student').create({name:name,age:age,sex:sex},callback);
}

//創(chuàng)建一個(gè)查找功能
studentSchema.statics.findByName = function (name, callback) {
    this.model('Student').find({
        name: name
    }, callback);
};

//更新
studentSchema.statics.updateInfoByQuery = function (query, data, callback) {
    this.model('Student').updateMany(query, data, callback);
}

//刪除
studentSchema.statics.deleteByName = function (name, callback) {
    this.model('Student').deleteMany({
        name: name
    }, callback);
}

//將學(xué)生架構(gòu)映射成一個(gè)學(xué)生(Student)模型
var studentModel = db.model('Student', studentSchema);

//將學(xué)生模型曝露出去
module.exports = studentModel;

使用它們,各種測(cè)試CRUD

var student = require('./model/student')

// //創(chuàng)建對(duì)象
// var admin= new student({
//     name: 'admin',
//     age: 33,
//     sex: true
// });
// //保存
// admin.save(function () {
//     console.log('ok');
// })

// //創(chuàng)建并保存另一個(gè)對(duì)象
// student.create({
//     name: 'test',
//     age: 18,
//     sex: false
// })

// //通過姓名查找
// student.findByName('admin', function (err, result) {
//     if (err)
//         console.log(err);
//     else
//         console.log(result);
// })

// //更新
// student.updateInfoByQuery({
//     name: 'admin'
// }, {
//     $set: {
//         age: 19
//     }
// }, function (err, result) {
//     if (err)
//         console.log(err);
//     else
//         console.log(result);
// })

// //刪除
// student.deleteByName('admin',function(err,result){
//     if (err)
//         console.log(err);
//     else
//         console.log(result);    
// })

// //添加
// student.addStudent('cc',66,true,function(err,result){
//      if (err)
//         console.log(err);
//     else
//         console.log(result);    
// })

6. 總結(jié)一下

  • 定義模型
    var xxschema=mongoose.schema({})
  • 靜態(tài)方法
    xxschema.statics.方法名=function(callback){
    }

    其中4種常用操作
  1. this.model('模型名稱').create()
  2. this.model('模型名稱').find()
  3. this.model('模型名稱').updateMany()
  4. this.model('模型名稱').deleteMany()
  • 創(chuàng)造模型
    db.model('模型名稱',xxschema)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末濒生,一起剝皮案震驚了整個(gè)濱河市埋泵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甜攀,老刑警劉巖秋泄,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琐馆,死亡現(xiàn)場(chǎng)離奇詭異规阀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瘦麸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門谁撼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滋饲,你說我怎么就攤上這事厉碟。” “怎么了屠缭?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵箍鼓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我呵曹,道長(zhǎng)款咖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任奄喂,我火速辦了婚禮铐殃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跨新。我一直安慰自己富腊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布域帐。 她就那樣靜靜地躺著赘被,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肖揣。 梳的紋絲不亂的頭發(fā)上民假,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音许饿,去河邊找鬼阳欲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的球化。 我是一名探鬼主播秽晚,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼筒愚!你這毒婦竟也來了赴蝇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤巢掺,失蹤者是張志新(化名)和其女友劉穎句伶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陆淀,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡考余,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轧苫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楚堤。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖含懊,靈堂內(nèi)的尸體忽然破棺而出身冬,到底是詐尸還是另有隱情,我是刑警寧澤岔乔,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布酥筝,位于F島的核電站,受9級(jí)特大地震影響雏门,放射性物質(zhì)發(fā)生泄漏嘿歌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一剿配、第九天 我趴在偏房一處隱蔽的房頂上張望搅幅。 院中可真熱鬧,春花似錦呼胚、人聲如沸茄唐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沪编。三九已至,卻和暖如春年扩,著一層夾襖步出監(jiān)牢的瞬間蚁廓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工厨幻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留相嵌,地道東北人腿时。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像饭宾,于是被迫代替她去往敵國(guó)和親批糟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361