Mongoose好處
- 能夠爲文檔建立一個模式結構(Schema) 能夠對模型中的對象/文檔進行驗證
- 數據能夠經過類型轉換轉換爲對象模型
- 可使用中間件來應用業務邏輯掛鉤
- 比Node原生的MongoDB驅動更容易
Mongoose提供的新對象
– Schema(模式對象) 對象定義約束了數據庫中的文檔結構 – Model 對象做爲集合中的全部文檔的表示,至關於MongoDB數據庫中的集合collection – Document 表示集合中的具體文檔,至關於集合中的一個具體的文檔mongodb
下載安裝
npm i mongoose --save
基本用法
//引入 var mongoose = require("mongoose"); //鏈接數據庫 mongoose.connect("mongodb://127.0.0.1/mongoose_test" , { useNewUrlParser: true, useUnifiedTopology:true}); mongoose.connection.once("open",function(){ console.log("--> 數據庫鏈接成功"); }); mongoose.connection.once("close",function(){ console.log("--> 數據庫鏈接已經斷開"); }); //斷開數據庫鏈接 //mongoose.disconnect(); //將mongoose.Schema 賦值給一個變量 var Schema = mongoose.Schema; //建立Schema(模式)對象 var stuSchema = new Schema({ name:String, age:Number, gender:{ type:String, default:"female" }, address:String }); //經過Schema來建立Model //Model表明的是數據庫中的集合,經過Model才能對數據庫進行操做 //mongoose.model(modelName, schema): //modelName 就是要映射的集合名 mongoose會自動將集合名變成複數 var StuModel = mongoose.model("student" , stuSchema); /* - 有了Model,咱們就能夠來對數據庫進行增刪改查的操做了 Model.create(doc(s), [callback]) - 用來建立一個或多個文檔並添加到數據庫中 - 參數: doc(s) 能夠是一個文檔對象,也能夠是一個文檔對象的數組 callback 當操做完成之後調用的回調函數 查詢的: Model.find(conditions, [projection], [options], [callback]) - 查詢全部符合條件的文檔 總會返回一個數組 Model.findById(id, [projection], [options], [callback]) - 根據文檔的id屬性查詢文檔 Model.findOne([conditions], [projection], [options], [callback]) - 查詢符合條件的第一個文檔 總和返回一個具體的文檔對象 conditions 查詢的條件 projection 投影 須要獲取到的字段 - 兩種方式 {name:1,_id:0} "name -_id" options 查詢選項(skip limit) {skip:3 , limit:1} callback 回調函數,查詢結果會經過回調函數返回 回調函數必須傳,若是不傳回調函數,壓根不會查詢 */ //增:StuModel.create(doc, function(err){}); StuModel.create({ name:"張三", age:16, address:"北京" },function (err) { if(!err){ console.log("插入成功"); } }); //查 StuModel.find({},"name age -_id", {skip:3 , limit:1} , function (err , docs) { if(!err){ console.log(docs); } }); /* 修改 Model.update(conditions, doc, [options], [callback]) Model.updateMany(conditions, doc, [options], [callback]) Model.updateOne(conditions, doc, [options], [callback]) - 用來修改一個或多個文檔 - 參數: conditions 查詢條件 doc 修改後的對象 options 配置參數 callback 回調函數 Model.replaceOne(conditions, doc, [options], [callback]) * */ StuModel.updateOne({name:"張三"},{$set:{age:20}},function (err) { if(!err){ console.log("修改爲功"); } }); /* 刪除: Model.remove(conditions, [callback]) Model.deleteOne(conditions, [callback]) Model.deleteMany(conditions, [callback]) */ StuModel.remove({name:"李四"},function (err) { if(!err){ console.log("刪除成功"); } }); /* Model.count(conditions, [callback]) - 統計文檔的數量的 */ StuModel.count({},function (err , count) { if(!err){ console.log(count); } }); //建立一個Document var stu = new StuModel({ name:"奔波霸", age:48, gender:"male", address:"碧波潭" }); stu.save(function (err) { if(!err){ console.log("保存成功~~~"); } }); StuModel.findOne({},function (err , doc) { if(!err){ /* update(update,[options],[callback]) - 修改對象 remove([callback]) - 刪除對象 */ //console.log(doc); /*doc.update({$set:{age:28}},function (err) { if(!err){ console.log("修改爲功~~~"); } });*/ /*doc.age = 18; doc.save();*/ /*doc.remove(function (err) { if(!err){ console.log("大師兄再見~~~"); } });*/ /* get(name) - 獲取文檔中的指定屬性值 set(name , value) - 設置文檔的指定的屬性值 id - 獲取文檔的_id屬性值 toJSON() ****** - 轉換爲一個JSON對象 toObject() - 將Document對象轉換爲一個普通的JS對象 轉換爲普通的js對象之後,注意全部的Document對象的方法或屬性都不能使用了 */ //console.log(doc.get("age")); //console.log(doc.age); //doc.set("name","豬小小"); //doc.name = "hahaha"; //console.log(doc._id); //var j = doc.toJSON(); //console.log(j); //var o = doc.toObject(); //console.log(o); doc = doc.toObject(); delete doc.address; console.log(doc._id); } });
建立Schema模式對象
var userSchema = new Schema(definition, option);
- options經常使用選項
• autoIndex 布爾值,開啓自動索引,默認true
• bufferCommands 布爾值,緩存因爲鏈接問題沒法執行的語句,默認true
• capped 集合中最大文檔數量
• collection 指定應用Schema的集合名稱
• id 布爾值,是否有應用於_id的id處理器,默認true
• _id 布爾值,是否自動分配id字段,默認true
• strict 布爾值,不符合Schema的對象不會被插入進數據庫,默認true - 定義Schema模式對象
- 模式爲集合中的文檔定義字段和字段類型。
- 對於在模式中的每一個字段,你都須要定一個特定的值類 型。受支持的類型以下:
- String
- Number
- Boolean
- Array
- Buffer
- Date
- ObjectId或Oid
- Mixed
- 須要爲每一個不一樣的文檔類型都定義一個模式
建立Model模型對象
- model(name, [schema], [collection] , [skipInit])
• name參數至關於模型的名字,之後能夠同過name找到模型。
• schema是建立好的模式對象。
• collection是要鏈接的集合名。
• skipInit是否跳過初始化,默認是false - model對象的方法
- remove(conditions, callback)
- deleteOne(conditions, callback)
- deleteMany(conditions, callback)
- find(conditions, projection, options, callback)
- findById(id, projection, options, callback)
- findOne(conditions, projection, options, callback)
- count(conditions, callback)
- create(doc, callback)
- update(conditions, doc, options, callback)
- ...
建立Document文檔對象
- document對象的方法
- equals(doc)
- id
- get(path,[type])
- set(path,value,[type])
- update(update,[options],[callback])
- save([callback])
- remove([callback])
- isNew
- isInit(path)
- toJSON()
- toObject()
- ...