Mongoose
是一個(gè)將JavaScript
對(duì)象與數(shù)據(jù)庫(kù)產(chǎn)生關(guān)系的一個(gè)框架,object related model
摆碉。操作對(duì)象塘匣,就是操作數(shù)據(jù)庫(kù)了;對(duì)象產(chǎn)生了兆解,同時(shí)也持久化了馆铁。這個(gè)思路是Java三大框架SSH
中Hibernate
框架的思路。徹底改變了人們使用數(shù)據(jù)庫(kù)的方式锅睛。
mongoose.jpg
-
mongoose 第一個(gè)小demo
/**
* Created by 黃森 on 2017/8/6.
*/
//引包埠巨,并不需要引用mongodb這個(gè)包
var mongoose = require('mongoose');
//鏈接數(shù)據(jù)庫(kù),haha是數(shù)據(jù)庫(kù)名字
mongoose.connect('mongodb://localhost/database');
//創(chuàng)建了一個(gè)模型。貓的模型现拒。所有的貓辣垒,都有名字,是字符串印蔬⊙埃“類(lèi)”。
var Cat = mongoose.model('Cat', { name: String });
//實(shí)例化一只貓
var kitty = new Cat({ name: 'miaomiao' });
//調(diào)用這只貓的save方法侥猬,保存這只貓
kitty.save(function (err) {
console.log('喵喵喵');
});
var tom = new Cat({"name":"湯姆"});
tom.save(function(){
console.log('喵喵喵');
});
-
使用mongosse的步驟
1例驹、數(shù)據(jù)庫(kù)連接
var mongoose = require('mongoose');
//創(chuàng)建數(shù)據(jù)庫(kù)連接
var db=mongoose.createConnection('mongodb://127.0.0.1:27017/database');
//監(jiān)聽(tīng)open事件
db.once('open', function (callback) {
console.log("數(shù)據(jù)庫(kù)成功連接");
});
2、定義模型
- 創(chuàng)建一個(gè)schema結(jié)構(gòu)退唠。例如:創(chuàng)建一個(gè)student模型
var studentSchema = new mongoose.Schema({
name : {type : String},
age : {type : Number},
sex : {type : String}
});
- 創(chuàng)建靜態(tài)方法
//查找學(xué)生方法
studentSchema.statics.findStudent = function(name, callback) {
this.model('Student').find({name: name}, callback);
//this.model('Student')指的是當(dāng)前這個(gè)類(lèi)
};
//修改學(xué)生信息方法
studentSchema.statics.update = function(conditions,update,options,callback){
this.model("Student").update(conditions, update, options, callback);
//參數(shù)鹃锈,第一個(gè)要改的字段,第二個(gè)要改成什么瞧预,第三個(gè)可以不傳屎债,第四個(gè)為回掉函數(shù)
}
//修改方法參數(shù)示例比如:
Student.update({"name":"小明"},{$set : {"age":30}},{},function(){
console.log("改年齡成功");
});
- 創(chuàng)建了一個(gè)模型,就是學(xué)生模型垢油,就是學(xué)生類(lèi)盆驹。
//類(lèi)是基于schema創(chuàng)建的。
var studentModel = db.model('Student', studentSchema);
- 向外暴露方法
module.exports = studentModel;
附:ObjectId的獲取方法:
var ObjectId=require('mongoose').Types.ObjectId;
mongoose
的操作基本上就是以上流程滩愁,對(duì)于前臺(tái)操作的時(shí)候就不用操作數(shù)據(jù)庫(kù)躯喇,只操作類(lèi),就可以做到對(duì)數(shù)據(jù)庫(kù)的CRUD
nodejs小結(jié)
- nodejs特點(diǎn):?jiǎn)尉€(xiàn)程硝枉,異步I/O玖瘸,事件驅(qū)動(dòng);
- 適合的程序:就是沒(méi)有太多計(jì)算檀咙,I/O比較多的業(yè)務(wù)雅倒;舉例:留言本,考試系統(tǒng)弧可,論壇蔑匣,圖片裁切服務(wù)器等
- Nodejs原生模塊:http,fs,path,url;靜態(tài)服務(wù)劣欢,簡(jiǎn)單路由;get裁良,post請(qǐng)求凿将;
- 好用的第三方模塊:formidable,gm,express;
- express:中間件,MVC建站价脾,模版引擎ejs,靜態(tài)服務(wù)牧抵,簡(jiǎn)單路由,get,post請(qǐng)求侨把,md5加密犀变,圖片上傳等;
- 服務(wù)器的一些概念:Cookie(舉例:猜你喜歡,臨時(shí)存放在客戶(hù)電腦中秋柄;cookie-parser模塊)获枝,Session(隨機(jī)的密鑰,用express-session模塊)骇笔;
- mongodb:安裝省店,開(kāi)機(jī),導(dǎo)入數(shù)據(jù)笨触,通過(guò)shell操作數(shù)據(jù)庫(kù)懦傍;mongovue可視化工具;nodejs做CRUD(增刪改查操作)芦劣;實(shí)戰(zhàn)(DA0層封裝)谎脯;索引,操作符$set,$lt,$gt,$push,$pull等
- mongoose:ODM(把對(duì)象和數(shù)據(jù)庫(kù)模型綁定在一起持寄,不用直接操作數(shù)據(jù)庫(kù),只需要操作對(duì)象娱俺,對(duì)象自動(dòng)到數(shù)據(jù)庫(kù)中持久)稍味;
以上也就是整個(gè)node的一個(gè)流程。