mogoosephp
schema---模式定義,堆數據庫字段的類型進行定義【string,int,float】mysql
var mongoose = require('mongoose'); // 頂會議用戶組件 // 建立模型 var Schema = mongoose.Schema; var userScheMa = new Schema({ userid: String, password: String });
Model---編譯模型sql
經過模式構造而來mongodb
Document---文檔實例化數據庫
1. 鏈接數據庫異步
var mongoose = require("mongoose"); // 鏈接字符串格式爲mongodb://主機/數據庫名 mongoose.connect('mongodb://localhost/test');
2. 存儲數據mongoose
var Schema = mongoose.Schema; //骨架模版 var movieSchema = new Schema({ doctor : String, title : String, language : String, country : String, year : Number, summary : String, poster : String, flash : String }) //模型 var Movie = mongoose.model('Movie', movieSchema); //存儲數據 var moive = new Movie({ title: '黑衣人三', doctor: '史密斯', year: 2018, flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf', country: '美國', language: '英語', summary: '好片' }) //保存數據庫 moive.save(function(err) { if (err) { console.log('保存失敗') return; } console.log('meow'); });
以上是最簡單的數據操做了post
流程就是:經過Schema建立一個模式movieSchema ,經過模式movieSchema建立一個模型Movie,經過模型Movie寫入數據,經過save方法保存性能
定義schema->建立model->實例化方法ui
表 –》 合集 –》 文檔
這裏涉及幾個名詞概念Schema與Model
3.Schema與
Model
雖然模式(Schema)在MongoDB的存儲中並非必須的,可是通常來講爲了文檔的整齊一致咱們在Mongoose中仍是會用到模式。能夠說,Mongoose中的一切都從定義模式開
不像傳統的關係型數據庫同樣,好比mysql,鏈接好數據後直接有把sql語句丟到一個指定的方法中就執行了,這裏會有Schema的抽象概念
Schema它相似於關係數據庫的表結構,能夠理解爲數據庫模型骨架
Schema能夠看做工廠中模具同樣,比如一個茶杯,喝水是茶杯最終的功能,茶杯自己就像是Model,那麼茶杯的批量生產是須要靠工廠的模具成型的,這就像是Schema了
Schema不只定義了文檔結構和使用性能,還能夠有擴展插件、實例方法、靜態方法、複合索引、文檔生命週期鉤子
Schema
生成Model
4. CURD操做
Model能夠看到關係型數據庫中的表,那麼經過new Model出來的實例document文檔對應的則是關係數據庫中表的一行記錄
document有許多內置的實例方法. 能夠直接執行增刪改查操做
增長數據
//模型var Movie = mongoose.model('Movie', movieSchema);
var moive = new Movie({ title: '黑衣人三', doctor: '史密斯', year: 2018, flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf', country: '美國', language: '英語', summary: '好片' }) //保存數據庫 moive.save(function(err) { if (err) { console.log('保存失敗') return; } console.log('meow'); });
在這裏咱們經過對模型Movie實例化生成了一個叫moive的文檔,並使用save方法將它存儲到了集合
修改數據
User.update({_id: oneUser._id}, { $set: {name: oneUser.name,password:oneUser.password} }, function(err) { if(err){ console.log(err) return } console.log('更新成功') });
更新的數據比較少用$set,可用性仍是很好
刪除數據
User.remove({ _id: id }, function(err) { if (err) { console.log(err) return } console.log('刪除成功') });
Document
是與MongoDB
文檔一一對應的模型,Document
可等同於Entity
,具備屬性和操做性
注意:
Document
的`CRUD都必須通過嚴格驗證的,參看2.5.2 Schema的strict嚴格配置
查詢內容過多,專題講解
有許多方式來更新文件,如下是經常使用的傳統方式:
PersonModel.findById(id,function(err,person){ person.name = 'MDragon'; person.save(function(err){}); });
這裏,利用Model
模型查詢到了person
對象,該對象屬於Entity
,能夠有save操做,若是使用
Model`操做,需注意:
PersonModel.findById(id,function(err,person){ person.name = 'MDragon'; var _id = person._id; //須要取出主鍵_id delete person._id; //再將其刪除 PersonModel.update({_id:_id},person,function(err){}); //此時才能用Model操做,不然報錯 });
update
第一個參數是查詢條件,第二個參數是更新的對象,但不能更新主鍵,這就是爲何要刪除主鍵的緣由。
固然這樣的更新很麻煩,可使用$set
屬性來配置,這樣也不用先查詢,若是更新的數據比較少,可用性仍是很好的:
PersonModel.update({_id:_id},{$set:{name:'MDragon'}},function(err){});
須要注意,Document
的CRUD
操做都是異步執行,callback
第一個參數必須是err
,而第二個參數各個方法不同,update
的callback
第二個參數是更新的數量,若是要返回更新後的對象,則要使用以下方法
Person.findByIdAndUpdate(_id,{$set:{name:'MDragon'}},function(err,person){ console.log(person.name); //MDragon });
相似的方法還有findByIdAndRemove
,如同名字,只能根據id查詢並做update
/remove
操做,操做的數據僅一條
若是是Entity
,使用save
方法,若是是Model
,使用create
方法
//使用Entity來增長一條數據 var krouky = new PersonModel({name:'krouky'}); krouky.save(callback); //使用Model來增長一條數據 var MDragon = {name:'MDragon'}; PersonModel.create(MDragon,callback);
兩種新增方法區別在於,若是使用Model
新增時,傳入的對象只能是純淨的JSON
對象,不能是由Model
建立的實體,緣由是:由Model
建立的實體krouky
雖然打印是隻有{name:'krouky'}
,可是krouky
屬於Entity
,包含有Schema
屬性和Model
數據庫行爲模型。若是是使用Model
建立的對象,傳入時必定會將隱藏屬性也存入數據庫,雖然3.x
追加了默認嚴格屬性,但也沒必要要增長操做的報錯
和新增同樣,刪除也有2種方式,但Entity
和Model
都使用remove
方法