MongoDB學習之Mongoose的使用

mongoose簡介

mongoose網站:https://mongoosejs.com/html

爲何要用Mongoose

Mongoose就是一個讓咱們能夠經過Node來操做MongoDB的一個模塊。
Mongoose本質是一個對象文檔模型(ODM)庫,
他對Node原生的MongoDB模塊進行了一部優化封裝,而且提供了更多的功能。

Mongoose的優點

  1. 能夠像操做對象同樣操做數據庫
  2. 能夠爲文檔建立一個模式結構(Schema)
  3. 能夠對模型中的文檔/文檔進行驗證
  4. 數據能夠經過類型轉換爲對象模型
  5. 可使用中間件來應用業務邏輯掛鉤
  6. 比Node原生的MongoDB驅動更容易

使用Mongoose

  1. 下載安裝mongoose模塊

cnpm install mongoose --savemongodb

  1. 引用mongoose:

var mongoose =require("mongoose");數據庫

  1. 使用"mongoose"鏈接數據庫:

var db =mongoose.connect("mongodb://user:pass@localhost:port/database");npm

  1. 執行下面代碼檢查默認數據庫test,是否能夠正常鏈接成功?
var mongoose =require("mongoose");
var db =mongoose.connect("mongodb://localhost/m_data");
db.connection.on("error",function (error) {
   console.log("數據庫鏈接失敗:" + error);
});
db.connection.on("open",function () {
   console.log("數據庫鏈接成功!");
});
db.connection.once('close', ()=>{
    console.log('鏈接已經斷開成功!')
})

mongoose基本使用

mongoose的幾個新的對象

在MongoDB中,多個Document能夠組成Collection(如下簡稱集合),多個集合又能夠組成數據庫。咱們想要操做MongoDB數據,那就得先要具有上面所說的包含數據的「文檔」,文檔又是什麼意思呢,請看以下介紹。api

  1. 文檔 —— 是MongoDB的核心概念,是鍵值對的一個有序集,在JavaScript裏文檔被表示成對象。同時它也是MongoDB中數據的基本單元,很是相似於關係型數據庫管理系統中的行,但更具表現力。
  2. 集合 —— 由一組文檔組成,若是將MongoDB中的一個文檔比喻成關係型數據庫中的一行,那麼一個集合就至關於一張表。
  3. Schema—— 一種以文件形式存儲的數據庫模型骨架,沒法直接通往數據庫端,也就是說它不具有對數據庫的操做能力,僅僅只是定義數據的類型,能夠說是數據屬性模型(傳統意義的表結構),又或着是「集合」的模型骨架。

mongoose中任何任何事物都是從Schema開始的。每個Schema對應MongoDB中的一個集合(collection)。Schema中定義了集合中文檔(document)的樣式。mongoose

定義一個Schema(表/ 模式對象)

//新建Schema 定義規則/字段的規則
let Schema= mongoose.Schema;
//定義personSchema的字段(規則)須要new一下 有點像構造函數的樣子
let personSchema= new Schema({
    name: String,
    sex: String,
    age: Number
});

基本屬性類型有函數

  • String
  • Number
  • Date
  • Boolean
  • Buffer
  • ObjectId
  • Mixed
  • Array

Model—— 由Schema構造生成的模型,根據Schema定義的數據類型規則,可操做具體的符合改規則的數據。優化

建立model(集合)

let personModel= mongoose.model('person', personSchema);

person:數據庫中的集合名稱,當咱們對其添加數據時若是person已經存在,則會保存到其目錄下,若是未存在,則會建立person集合,而後在保存數據。網站

//4. 插入文檔
personModel.create({
    name: '張寧樂',
    sex: '男',
    age: 18
}, (err)=>{
   if(!err){
       console.log('插入成功!')
   }else{
       throw err;
   }
});

mongoose 插入和查詢

mongoose查找數據的一些方法:
https://mongoosejs.com/docs/a...ui

插入多條數據

personModel.create([
    {name:'張逗逗',age: 2,sex: '男'},
    {name:'牛嘻嘻',age: 2,sex: '女'}
], (err)=>{
   if(!err){
       console.log('插入成功!')
   }else{
       throw err;
   }
})

查詢

  • Model.find()
personModel.find({name: '張寧樂'}, (err, data)=>{
    if(!err){
        console.log(data)
    }else{
        throw err;
    }
})

查詢全部

  • Model.find({}, callback)
personModel.find({}, (err, data)=>{
    if(!err){
        console.log(data)
    }else{
        throw err;
    }
})

也能夠選擇查找數據的條件(0隱藏 1顯示 id默認顯示) 和MongoDB在命令行中的使用方法同樣

//查詢時只顯示name 
personModel.find({}, {name: 1, _id: 0}, (err,data)=>{
    if(!err){
        console.log(data)
    }else{
        throw err;
    }
})

find() skip(查詢開始的位置)和limit(增長的條數)也可使用

personModel.find({}, {name: 1, _id: 0, age: 1}, {skip: 0, limit: 2}, (err, data)=>{
    //只顯示name 和 age   從第1開始 每次查詢2條 
    if(!err){
        console.log(data)
    }else{
        throw err;
    }
})

MongoDB的find()、findOne() 等命令在 mongoose裏均可以使用
具體可參考 :https://mongoosejs.com/docs/a...

mongoose 修改和刪除

參考: https://mongoosejs.com/docs/a...

修改方法:

  • Model.update()
  • Model.updateMany()
  • Model.updateOne()
  • Model.watch()
personModel.update({name: '張寧樂'}, {$set: {age: 20}}, (err, data)=>{
   if(!err){
       console.log('修改爲功!')
       console.log(data)
   }else{
       throw err;
   }
})

4a9f49d480f66c5a64cb9a833459fdd.png

刪除方法

  • Model.remove()
  • Model.deleteMany()
  • Model.deleteOne()
personModel.remove({name:'牛嘻嘻'}, (err)=>{
    if(!err){
        console.log('刪除成功!')
    }else{
        throw err;
    }
})

統計文檔條數

  • Model.count()
personModel.count({}, (err,count)=>{
    if(!err){
        console.log('查詢條數成功! 一共:' + count + '條');
    }else{
        throw err;
    }
})

2b7684dc310af51ac7fb50e5daa1123.png

Entity

Entity—— 由Model建立的實體,使用save方法保存數據,Model和Entity的操做都能影響數據庫的操做,但Model比Entity更具操做性。
使用Model建立Entity,以下示例:

let mongoose= require('mongoose');
let db= mongoose.connection('mongodb://localhost/m_data');
db.on('open', ()=>{
    console.log('鏈接成功!')
})
let Schema= mongoose.Schema;
let personSchema= new Schema({
    name: String,
    sex: String,
    age: Number
});
let personModel= mongoose.model('person', personSchema);
let personEntity = new personModel({
    name: '許巍',
    sex: '男',
    age: 38
})
personEntity.save((err, person)=>{
    if(!err){
        console.log('保存成功!')
        console.log(person);
    }else{
        console.log('保存失敗!')
    }
})

c85c9b12f87f890e10e74f23555c802.png

參考:https://blog.csdn.net/swimmin...

相關文章
相關標籤/搜索