成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

「全棧初探」- Mongoose的簡(jiǎn)單使用

vboy1010 / 1682人閱讀

摘要:下載依賴包完成項(xiàng)目創(chuàng)建,項(xiàng)目結(jié)構(gòu)連接數(shù)據(jù)庫(kù)在根目錄下創(chuàng)建,輸入以下代碼,監(jiān)聽的幾個(gè)事件,如果以上操作都沒錯(cuò)的話,那么就會(huì)監(jiān)聽第一個(gè)事件事件,表示連接數(shù)據(jù)庫(kù)成功,在最后,我們導(dǎo)出對(duì)象,以供其他模塊使用。

一、準(zhǔn)備工作 1. 啟動(dòng)mongo數(shù)據(jù)庫(kù)

關(guān)于下載安裝啟動(dòng)數(shù)據(jù)庫(kù)我這里就不做過(guò)多解釋,谷歌下會(huì)有很多教程,啟動(dòng)成功后的命令窗如下所示:

2. 啟用可視化Mongo工具

這里我們用的是Robo 3T,為什么要用可視化工具呢,因?yàn)樾“讓?duì)于命令行還是很陌生的,在命令行中查看數(shù)據(jù)庫(kù)的內(nèi)容有些不直觀,這個(gè)可視化工具的安裝包谷歌一下就闊以找到啦~

啟動(dòng)可視化工具

連接數(shù)據(jù)庫(kù)(前提是已經(jīng)啟動(dòng)了mongo數(shù)據(jù)庫(kù))

新建數(shù)據(jù)庫(kù)mongoosetest


創(chuàng)建成功

數(shù)據(jù)庫(kù)準(zhǔn)備工作完成后,我們進(jìn)入代碼環(huán)節(jié)啦~

二、利用mongoose進(jìn)行簡(jiǎn)單的數(shù)據(jù)庫(kù)操作 1. 新建項(xiàng)目

新建空文件夾,命名為mongooseTest

啟動(dòng)終端,進(jìn)入該文件夾

在命令行中輸入npm init 初始化項(xiàng)目

npm init

這里有個(gè)小問(wèn)題就是項(xiàng)目不能以駝峰命名,所以npm init后會(huì)讓你輸入一個(gè)別名,我們就叫mongoosetest好了,然后一直Enter,項(xiàng)目創(chuàng)建成功。

下載依賴包 mongoose

npm i mongoose -s

完成項(xiàng)目創(chuàng)建,項(xiàng)目結(jié)構(gòu):

2. 連接數(shù)據(jù)庫(kù)

在根目錄下創(chuàng)建db.js,輸入以下代碼,監(jiān)聽connection的幾個(gè)事件,如果以上操作都沒錯(cuò)的話,那么就會(huì)監(jiān)聽第一個(gè)事件“connect”事件,表示連接數(shù)據(jù)庫(kù)成功,在最后,我們導(dǎo)出mongoose對(duì)象,以供其他模塊使用。

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

//連接數(shù)據(jù)庫(kù)
mongoose.connect(DB_URL);

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

//連接異常現(xiàn)實(shí)錯(cuò)誤原因
mongoose.connection.on("error",function (err) {
    console.log("Mongoose connect Error:" + err);
});

//連接斷開后輸出語(yǔ)句
mongoose.connection.on("disconnected",function () {
    console.log("Mongoose connect disconnected");
});

//導(dǎo)出mongoose對(duì)象
module.exports = mongoose;

運(yùn)行db.js,如下圖所示:

第一步連接數(shù)據(jù)庫(kù)成功啦~

3. 新建Schema與發(fā)布Model

那么什么是Schema呢?schema是mongoose里會(huì)用到的一種數(shù)據(jù)模式,可以理解為我們傳統(tǒng)數(shù)據(jù)庫(kù)中的表(table)結(jié)構(gòu)的定義,簡(jiǎn)單地說(shuō),就是一個(gè)數(shù)據(jù)模板,每個(gè)schema會(huì)映射到mongodb中的一個(gè)collection,它不具備操作數(shù)據(jù)庫(kù)的能力。

那什么又是Model呢?Model是由Schema發(fā)布生成的模型,具有抽象屬性和行為的數(shù)據(jù)庫(kù)操作對(duì),Model可以直接操作Mongo數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

解釋完了代碼用說(shuō)話,新建user.js,輸入以下代碼,創(chuàng)建一個(gè)user的schema,并且利用Schema發(fā)布一個(gè)Model,導(dǎo)出Model:

/**
 * Created by vince on 2017/7/10.  
 * user.js
 */
//引入之前我們創(chuàng)建的mongose對(duì)象
var mongoose = require("./db.js");
//創(chuàng)建一個(gè)schema對(duì)象
var Schema = mongoose.Schema;

//創(chuàng)建一個(gè)schema實(shí)例
var UserSchema = new Schema({
    username: {type: String},
    userpwd: {type: String},
    userage: {type: Number},
    logindate: {type: Date}
});

//利用UserSchema實(shí)例,發(fā)布一個(gè)User的model并且導(dǎo)出
module.exports = mongoose.model("User",UserSchema);
4. Model創(chuàng)造Entity實(shí)體,對(duì)數(shù)據(jù)庫(kù)操作

那Entity又是什么呢?Entity是由Model創(chuàng)建的實(shí)體,他的操作也會(huì)影響數(shù)據(jù)庫(kù)。

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

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

//創(chuàng)建一個(gè)插入數(shù)據(jù)到數(shù)據(jù)庫(kù)中的函數(shù)

function insert() {

    //用Model創(chuàng)建一個(gè)Entity實(shí)體,就是一個(gè)User的數(shù)據(jù)
    var user_1 = new User({
        username: "Vince Hua",
        userpwd: "123456",
        userage: 20,
        logindate: new Date()
    });

    //調(diào)用user_1的save方法,插入user_1的數(shù)據(jù)到數(shù)據(jù)庫(kù)中
    user_1.save(function (err, res) {
        if(err){
            console.log("Error: " + err);
        }else{
            console.log("Success Res: " + res)
        }
    });
}
//執(zhí)行插入操作
insert();

以上代碼中的user_1就是Model創(chuàng)建的Entity實(shí)體,它具有很多操作,svae()只是其中一個(gè)。

運(yùn)行insert.js,命令行輸入框得到一下結(jié)果:

我們?cè)俨榭磾?shù)據(jù)庫(kù)中:

Amazing,我們成功插入一個(gè)數(shù)據(jù)啦~

5. 總結(jié)Schema、Model、Entity的關(guān)系

Schema : 一種以文件形式存儲(chǔ)的數(shù)據(jù)庫(kù)模型骨架,不具備數(shù)據(jù)庫(kù)的操作能力

Model : 由Schema發(fā)布生成的模型,具有抽象屬性和行為的數(shù)據(jù)庫(kù)操作對(duì)

Entity : 由Model創(chuàng)建的實(shí)體,他的操作也會(huì)影響數(shù)據(jù)庫(kù)

Schema、Model、Entity的關(guān)系是:Schema生成Model,Model創(chuàng)造Entity,Model和Entity都可對(duì)數(shù)據(jù)庫(kù)操作造成影響,但Model比Entity更具操作性。

三、mongoose的其他一些 “騷操作”

更新數(shù)據(jù)庫(kù)

這里我們是直接用Model來(lái)操作數(shù)據(jù)庫(kù),新建update.js

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

function update(){
    //wherestr是我們要進(jìn)行操作的數(shù)據(jù)
    var wherestr = {"username" : "Vince Hua"};
    //update是我們更新的數(shù)據(jù)
    var updatestr = {"userpwd": "hhhhhh"};

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

update();

運(yùn)行updata.js,操作成功,命令行輸出:

更新成功,查看數(shù)據(jù)庫(kù):

刪除數(shù)據(jù)

同樣我們直接用Model操作數(shù)據(jù)庫(kù),新建remove.js,輸入以下代碼:

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

function del() {
    //需要?jiǎng)h除的數(shù)據(jù)
    var wherestr = {"username" : "Vince Hua"};

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

del();

執(zhí)行代碼,得到一下結(jié)果:

查看數(shù)據(jù)庫(kù),顯示數(shù)據(jù)已經(jīng)被刪除

查找數(shù)據(jù)

查找數(shù)據(jù)之前,我們插入一下幾個(gè)數(shù)據(jù)

依舊是使用Model操作數(shù)據(jù)庫(kù),新建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();

執(zhí)行代碼,得到查詢結(jié)果:

四、總結(jié)

這里介紹的知識(shí)簡(jiǎn)單的mongoose的增刪改查操作,只是方便我們第一次接觸Mongo入門的小練習(xí)的Demo而已,mongoose還有其他強(qiáng)大的操作這里沒有一一介紹,希望小伙伴們可以查看中文文檔了解更多,如果你看了這篇文章覺得自己已經(jīng)入門啦,那么恭喜你~

所有代碼已經(jīng)上傳到GitHub,傳送門: Demo代碼

nice to meet you ~ ,給個(gè)小star鼓勵(lì)下?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19035.html

相關(guān)文章

  • node express mongoose簡(jiǎn)單實(shí)現(xiàn)全棧之增刪改查

    摘要:作為一個(gè)有志向的前端,怎么能不搞搞全棧呢。。。地址歡迎大家多多交流前端技術(shù)啊,如果大家喜歡的話,請(qǐng)給我一個(gè)小小的哦 作為一個(gè)有志向的前端,怎么能不搞搞全(zhuang)棧(bi)呢。。。說(shuō)搞咱就搞啊,后端就用node,數(shù)據(jù)庫(kù)就用mongodb,前端呢,呃,再搞個(gè)node的web框架express,思路搞定,開始搭建我們的環(huán)境,搭建之前還是先看看我們的目標(biāo)和成果 項(xiàng)目的目標(biāo)和成果 sh...

    AndroidTraveler 評(píng)論0 收藏0
  • 前端小白全棧初體驗(yàn)

    摘要:原文來(lái)源全棧初體驗(yàn)前言據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了和并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫(kù)再重定向到頁(yè)面獲取數(shù)據(jù)庫(kù)中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺(tái) 原文來(lái)源: 全棧初體驗(yàn) 前言 據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后...

    wangym 評(píng)論0 收藏0
  • 前端小白全棧初體驗(yàn)

    摘要:原文來(lái)源全棧初體驗(yàn)前言據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了和并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫(kù)再重定向到頁(yè)面獲取數(shù)據(jù)庫(kù)中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺(tái) 原文來(lái)源: 全棧初體驗(yàn) 前言 據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后...

    Jioby 評(píng)論0 收藏0
  • 前端小白全棧初體驗(yàn)

    摘要:原文來(lái)源全棧初體驗(yàn)前言據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了和并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫(kù)再重定向到頁(yè)面獲取數(shù)據(jù)庫(kù)中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺(tái) 原文來(lái)源: 全棧初體驗(yàn) 前言 據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后...

    PumpkinDylan 評(píng)論0 收藏0
  • 基于 Vue2+Node+mongoDB 前后端分離全棧練手小項(xiàng)目

    摘要:本文源碼簡(jiǎn)介之前剛?cè)腴T并做好了一個(gè)簡(jiǎn)而全的純?nèi)彝暗捻?xiàng)目,數(shù)據(jù)都是本地模擬請(qǐng)求的詳情請(qǐng)移步這里為了真正做到數(shù)據(jù)庫(kù)的真實(shí)存取,于是又開始入門了并以此來(lái)為之前的頁(yè)面寫后臺(tái)數(shù)據(jù)接口。 本文源碼:Github 簡(jiǎn)介: 之前剛?cè)腴Tvue并做好了一個(gè)簡(jiǎn)而全的純vue2全家桶的項(xiàng)目,數(shù)據(jù)都是本地 json 模擬請(qǐng)求的;詳情請(qǐng)移步這里:vue-proj-demo 為了真正做到數(shù)據(jù)庫(kù)的真實(shí)存取,于是又...

    jay_tian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<