「全棧初探」- Mongoose的簡單使用

1、準備工做

1. 啓動mongo數據庫

關於下載安裝啓動數據庫我這裏就不作過多解釋,谷歌下會有不少教程,啓動成功後的命令窗以下所示:git

image

2. 啓用可視化Mongo工具

這裏咱們用的是Robo 3T,爲何要用可視化工具呢,由於小白對於命令行仍是很陌生的,在命令行中查看數據庫的內容有些不直觀,這個可視化工具的安裝包穀歌一下就闊以找到啦~github

  1. 啓動可視化工具mongodb

  2. 鏈接數據庫(前提是已經啓動了mongo數據庫)數據庫

image

  1. 新建數據庫mongoosetestnpm

image
image

  1. 建立成功mongoose

image

數據庫準備工做完成後,咱們進入代碼環節啦~函數

2、利用mongoose進行簡單的數據庫操做

1. 新建項目

  1. 新建空文件夾,命名爲mongooseTest工具

  2. 啓動終端,進入該文件夾ui

  3. 在命令行中輸入npm init 初始化項目spa

npm init

這裏有個小問題就是項目不能以駝峯命名,因此npm init後會讓你輸入一個別名,咱們就叫mongoosetest好了,而後一直Enter,項目建立成功。
image

  1. 下載依賴包 mongoose

npm i mongoose -s
  1. 完成項目建立,項目結構:

image

2. 鏈接數據庫

在根目錄下建立db.js,輸入如下代碼,監聽connection的幾個事件,若是以上操做都沒錯的話,那麼就會監聽第一個事件「connect」事件,表示鏈接數據庫成功,在最後,咱們導出mongoose對象,以供其餘模塊使用。

/**
 * Created by vince on 2017/7/10.
 * db.js
 */
var mongoose = require('mongoose');
//設置mongo存儲路徑
var DB_URL = 'mongodb://localhost:27017/mongoosetest';

//鏈接數據庫
mongoose.connect(DB_URL);

//鏈接成功後輸出語句
mongoose.connection.on('connected',function () {
    console.log('Mongoose connect ' + DB_URL + " success");
});

//鏈接異常現實錯誤緣由
mongoose.connection.on('error',function (err) {
    console.log('Mongoose connect Error:' + err);
});

//鏈接斷開後輸出語句
mongoose.connection.on('disconnected',function () {
    console.log('Mongoose connect disconnected');
});

//導出mongoose對象
module.exports = mongoose;

運行db.js,以下圖所示:

image

第一步鏈接數據庫成功啦~

3. 新建Schema與發佈Model

那麼什麼是Schema呢?schema是mongoose裏會用到的一種數據模式,能夠理解爲咱們傳統數據庫中的表(table)結構的定義,簡單地說,就是一個數據模板,每一個schema會映射到mongodb中的一個collection,它不具有操做數據庫的能力。

那什麼又是Model呢?Model是由Schema發佈生成的模型,具備抽象屬性和行爲的數據庫操做對,Model能夠直接操做Mongo數據庫中的數據。

解釋完了代碼用說話,新建user.js,輸入如下代碼,建立一個user的schema,而且利用Schema發佈一個Model,導出Model:

/**
 * Created by vince on 2017/7/10.  
 * user.js
 */
//引入以前咱們建立的mongose對象
var mongoose = require('./db.js');
//建立一個schema對象
var Schema = mongoose.Schema;

//建立一個schema實例
var UserSchema = new Schema({
    username: {type: String},
    userpwd: {type: String},
    userage: {type: Number},
    logindate: {type: Date}
});

//利用UserSchema實例,發佈一個User的model而且導出
module.exports = mongoose.model("User",UserSchema);

4. Model創造Entity實體,對數據庫操做

那Entity又是什麼呢?Entity是由Model建立的實體,他的操做也會影響數據庫。

  • 新建insert.js,輸入如下代碼:

/**
 * Created by vince on 2017/7/10.
 * insert.js
 */
//引如User的Model
var User = require('./user');

//建立一個插入數據到數據庫中的函數

function insert() {

    //用Model建立一個Entity實體,就是一個User的數據
    var user_1 = new User({
        username: 'Vince Hua',
        userpwd: '123456',
        userage: 20,
        logindate: new Date()
    });

    //調用user_1的save方法,插入user_1的數據到數據庫中
    user_1.save(function (err, res) {
        if(err){
            console.log("Error: " + err);
        }else{
            console.log("Success Res: " + res)
        }
    });
}
//執行插入操做
insert();

以上代碼中的user_1就是Model建立的Entity實體,它具備不少操做,svae()只是其中一個。

  • 運行insert.js,命令行輸入框獲得一下結果:
    image

  • 咱們再查看數據庫中:
    image

  • Amazing,咱們成功插入一個數據啦~

5. 總結Schema、Model、Entity的關係

  • Schema : 一種以文件形式存儲的數據庫模型骨架,不具有數據庫的操做能力

  • Model : 由Schema發佈生成的模型,具備抽象屬性和行爲的數據庫操做對

  • Entity : 由Model建立的實體,他的操做也會影響數據庫

  • Schema、Model、Entity的關係是:Schema生成Model,Model創造Entity,Model和Entity均可對數據庫操做形成影響,但Model比Entity更具操做性。

3、mongoose的其餘一些 「騷操做」

  • 更新數據庫

    這裏咱們是直接用Model來操做數據庫,新建update.js

/**
 * Created by vince on 2017/7/10.
 * update.js
 */
//引入User的Model
var User = require("./user.js");

function update(){
    //wherestr是咱們要進行操做的數據
    var wherestr = {'username' : 'Vince Hua'};
    //update是咱們更新的數據
    var updatestr = {'userpwd': 'hhhhhh'};

    User.update(wherestr, updatestr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Update Res: " + res);
        }
    })
}

update();
  • 運行updata.js,操做成功,命令行輸出:

image

  • 更新成功,查看數據庫:

image

  • 刪除數據

    一樣咱們直接用Model操做數據庫,新建remove.js,輸入如下代碼:

/**
 * Created by vince on 2017/7/10.
 * remove.js
 */
var User = require("./user");

function del() {
    //須要刪除的數據
    var wherestr = {'username' : 'Vince Hua'};

    User.remove(wherestr,function (err, res) {
        if(err){
            console.log("Error: " + err)
        }else{
            console.log("Success Remove: " + res);
        }
    })
}

del();
  • 執行代碼,獲得一下結果:

image

  • 查看數據庫,顯示數據已經被刪除

image

  • 查找數據

  • 查找數據以前,咱們插入一下幾個數據
    image

依舊是使用Model操做數據庫,新建find.js,輸入如下代碼:

/**
 * Created by vince on 2017/7/10.
 * find.js
 */
var User = require('./user');
function findByConditions() {
    var wherestr = {'username' : 'Mike Guo'};
    User.find(wherestr,function (err, res) {
        if(err){
            console.log("Error: " + err);
        }else{
            console.log("Find Res: " + res);
        }
    });
}
findByConditions();
  • 執行代碼,獲得查詢結果:

image

4、總結

這裏介紹的知識簡單的mongoose的增刪改查操做,只是方便咱們第一次接觸Mongo入門的小練習的Demo而已,mongoose還有其餘強大的操做這裏沒有一一介紹,但願小夥伴們能夠查看中文文檔瞭解更多,若是你看了這篇文章以爲本身已經入門啦,那麼恭喜你~

  • 全部代碼已經上傳到GitHub,傳送門: Demo代碼

  • nice to meet you ~ ,給個小star鼓勵下?

相關文章
相關標籤/搜索