Mongoose是在Node.js異步環境下對MongoDB進行便捷操做的對象模型工具。 實際開發中會選用相似mongoose的模塊來操做MongoDB數據庫以提高開發效率。mongodb
Mongoose三個重要概念:數據庫
- Schema:一種以文件形式存儲的數據庫模型骨架,不具有數據庫的操做能力
- Model:由Schema發佈生成的模型,具備抽象屬性和行爲的數據庫操做對
- Entity:由Model建立的實體
這是一種以文件形式存儲的數據庫模型骨架,沒法直接通往數據庫端,也就是說它不具有對數據庫的操做能力,僅僅只是數據庫模型在程序片斷中的一種表現,能夠說是數據屬性模型(傳統意義的表結構),又或者是集合的模型骨架。基本屬性類型有字符串、日期型、數值型、布爾型、null、數組、內嵌文檔等。 是Mongoose裏會用到的一種數據模式,能夠理解爲表結構的定義;每一個schema會映射到mongodb中的一個collection。 定義一個Schema:npm
var PersonSchema = new monoose.Schema({
name:{type:String},
age:{type:Number,default:0} ,
time:{type:Date,default:Date.now},
email:{type:String,default:''}
})
複製代碼
由Schema構造生成的模型,除了Schema定義的數據庫骨架之外,還具備數據庫操做的行爲,相似於管理數據屬性、行爲的類。數組
//建立模型,能夠用它來操做數據庫中的person集合,指的是總體。建立一個person集合
var PersonModel = db.model("person", PersonSchema);
複製代碼
person:數據庫中的集合名稱,當咱們對其添加數據時若是person已經存在,則會保存到其目錄下,若是未存在,則會建立person集合,而後再保存數據。有了model,也就有了操做數據的能力。 建立一個Model模型,須要指定兩點:1,集合名稱;2,集合的Schema結構對象。知足這兩點,就能夠操做數據庫啦。bash
由Model建立的實體,使用save方法保存數據,Model和Entity都能影響數據庫的操做,但Model比Entity更具操做性。建立Entity成功後,Schema的屬性就變成了Model和Entity的公共屬性了。 使用Model建立Entity異步
//根據模型建立實體,是指的個體對象
var personEntity = new PersonModel({
name : "zf",
age : 6,
email: "zf@qq.com",
home:'beijing'
});
複製代碼
Schema、Model、Entity的關係:Schema生成Model,Model創造Entity,Model和Entity均可對數據庫操做形成影響,但Model比Entity更具操做性。mongoose
關於ObjectId 主鍵,一種特殊並且很是重要的類型,每一個Schema都會默認配置這個屬性,屬性名爲_id,除非本身定義,方可覆蓋。工具
var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var StudentSchema = new Schema({}); //默認會有_id:ObjectId
var TeacherSchema = new Schema({id:ObjectId});//只有id:ObjectId
複製代碼
Mongoose中的數據類型: • String • Number • Date • Boolean • Buffer • ObjectId • Mixed • Arrayui
須要配置好Node.js環境和安裝好MongoDB數據庫,Node.js的配置可參考Node.js入門及安裝,以及MongoDB數據庫的入門MongoDB入門詳解spa
打開cmd,定位到項目根目錄,執行npm install mongoose --save
命令。
安裝完成示例:
var mongoose = require('mongoose'); //引用mongoose模塊
var db = mongoose.createConnection('localhost','test'); //建立一個數據庫鏈接
複製代碼
db.on('error',console.error.bind(console,'鏈接錯誤:'));
db.once('open',function(){
//一次打開記錄
});
複製代碼
成功開啓數據庫後,就能夠執行數據庫相應操做
var PersonSchema = new mongoose.Schema({
name:String //定義一個屬性name,類型爲String
});
複製代碼
var PersonModel = db.model('Person',PersonSchema);
複製代碼
var personEntity = new PersonModel({name:'Krouky'});
//打印這個實體的名字看看
console.log(personEntity.name); //Krouky
複製代碼
Entity是具備具體的數據庫操做CRUD的