摘要:下載依賴包完成項目創(chuàng)建,項目結(jié)構(gòu)連接數(shù)據(jù)庫在根目錄下創(chuàng)建,輸入以下代碼,監(jiān)聽的幾個事件,如果以上操作都沒錯的話,那么就會監(jiān)聽第一個事件事件,表示連接數(shù)據(jù)庫成功,在最后,我們導(dǎo)出對象,以供其他模塊使用。
一、準(zhǔn)備工作 1. 啟動mongo數(shù)據(jù)庫
關(guān)于下載安裝啟動數(shù)據(jù)庫我這里就不做過多解釋,谷歌下會有很多教程,啟動成功后的命令窗如下所示:
2. 啟用可視化Mongo工具這里我們用的是Robo 3T,為什么要用可視化工具呢,因為小白對于命令行還是很陌生的,在命令行中查看數(shù)據(jù)庫的內(nèi)容有些不直觀,這個可視化工具的安裝包谷歌一下就闊以找到啦~
啟動可視化工具
連接數(shù)據(jù)庫(前提是已經(jīng)啟動了mongo數(shù)據(jù)庫)
新建數(shù)據(jù)庫mongoosetest
創(chuàng)建成功
數(shù)據(jù)庫準(zhǔn)備工作完成后,我們進入代碼環(huán)節(jié)啦~
二、利用mongoose進行簡單的數(shù)據(jù)庫操作 1. 新建項目新建空文件夾,命名為mongooseTest
啟動終端,進入該文件夾
在命令行中輸入npm init 初始化項目
npm init
這里有個小問題就是項目不能以駝峰命名,所以npm init后會讓你輸入一個別名,我們就叫mongoosetest好了,然后一直Enter,項目創(chuàng)建成功。
下載依賴包 mongoose
npm i mongoose -s
完成項目創(chuàng)建,項目結(jié)構(gòu):
2. 連接數(shù)據(jù)庫在根目錄下創(chuàng)建db.js,輸入以下代碼,監(jiān)聽connection的幾個事件,如果以上操作都沒錯的話,那么就會監(jiān)聽第一個事件“connect”事件,表示連接數(shù)據(jù)庫成功,在最后,我們導(dǎo)出mongoose對象,以供其他模塊使用。
/** * Created by vince on 2017/7/10. * db.js */ var mongoose = require("mongoose"); //設(shè)置mongo存儲路徑 var DB_URL = "mongodb://localhost:27017/mongoosetest"; //連接數(shù)據(jù)庫 mongoose.connect(DB_URL); //連接成功后輸出語句 mongoose.connection.on("connected",function () { console.log("Mongoose connect " + DB_URL + " success"); }); //連接異常現(xiàn)實錯誤原因 mongoose.connection.on("error",function (err) { console.log("Mongoose connect Error:" + err); }); //連接斷開后輸出語句 mongoose.connection.on("disconnected",function () { console.log("Mongoose connect disconnected"); }); //導(dǎo)出mongoose對象 module.exports = mongoose;
運行db.js,如下圖所示:
第一步連接數(shù)據(jù)庫成功啦~
3. 新建Schema與發(fā)布Model那么什么是Schema呢?schema是mongoose里會用到的一種數(shù)據(jù)模式,可以理解為我們傳統(tǒng)數(shù)據(jù)庫中的表(table)結(jié)構(gòu)的定義,簡單地說,就是一個數(shù)據(jù)模板,每個schema會映射到mongodb中的一個collection,它不具備操作數(shù)據(jù)庫的能力。
那什么又是Model呢?Model是由Schema發(fā)布生成的模型,具有抽象屬性和行為的數(shù)據(jù)庫操作對,Model可以直接操作Mongo數(shù)據(jù)庫中的數(shù)據(jù)。
解釋完了代碼用說話,新建user.js,輸入以下代碼,創(chuàng)建一個user的schema,并且利用Schema發(fā)布一個Model,導(dǎo)出Model:
/** * Created by vince on 2017/7/10. * user.js */ //引入之前我們創(chuàng)建的mongose對象 var mongoose = require("./db.js"); //創(chuàng)建一個schema對象 var Schema = mongoose.Schema; //創(chuàng)建一個schema實例 var UserSchema = new Schema({ username: {type: String}, userpwd: {type: String}, userage: {type: Number}, logindate: {type: Date} }); //利用UserSchema實例,發(fā)布一個User的model并且導(dǎo)出 module.exports = mongoose.model("User",UserSchema);4. Model創(chuàng)造Entity實體,對數(shù)據(jù)庫操作
那Entity又是什么呢?Entity是由Model創(chuàng)建的實體,他的操作也會影響數(shù)據(jù)庫。
新建insert.js,輸入以下代碼:
/** * Created by vince on 2017/7/10. * insert.js */ //引如User的Model var User = require("./user"); //創(chuàng)建一個插入數(shù)據(jù)到數(shù)據(jù)庫中的函數(shù) function insert() { //用Model創(chuàng)建一個Entity實體,就是一個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ù)庫中 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實體,它具有很多操作,svae()只是其中一個。
運行insert.js,命令行輸入框得到一下結(jié)果:
我們再查看數(shù)據(jù)庫中:
Amazing,我們成功插入一個數(shù)據(jù)啦~
5. 總結(jié)Schema、Model、Entity的關(guān)系Schema : 一種以文件形式存儲的數(shù)據(jù)庫模型骨架,不具備數(shù)據(jù)庫的操作能力
Model : 由Schema發(fā)布生成的模型,具有抽象屬性和行為的數(shù)據(jù)庫操作對
Entity : 由Model創(chuàng)建的實體,他的操作也會影響數(shù)據(jù)庫
Schema、Model、Entity的關(guān)系是:Schema生成Model,Model創(chuàng)造Entity,Model和Entity都可對數(shù)據(jù)庫操作造成影響,但Model比Entity更具操作性。
三、mongoose的其他一些 “騷操作”更新數(shù)據(jù)庫
這里我們是直接用Model來操作數(shù)據(jù)庫,新建update.js
/** * Created by vince on 2017/7/10. * update.js */ //引入User的Model var User = require("./user.js"); function update(){ //wherestr是我們要進行操作的數(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();
運行updata.js,操作成功,命令行輸出:
更新成功,查看數(shù)據(jù)庫:
刪除數(shù)據(jù)
同樣我們直接用Model操作數(shù)據(jù)庫,新建remove.js,輸入以下代碼:
/** * Created by vince on 2017/7/10. * remove.js */ var User = require("./user"); function del() { //需要刪除的數(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ù)庫,顯示數(shù)據(jù)已經(jīng)被刪除
查找數(shù)據(jù)
查找數(shù)據(jù)之前,我們插入一下幾個數(shù)據(jù)
依舊是使用Model操作數(shù)據(jù)庫,新建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é)這里介紹的知識簡單的mongoose的增刪改查操作,只是方便我們第一次接觸Mongo入門的小練習(xí)的Demo而已,mongoose還有其他強大的操作這里沒有一一介紹,希望小伙伴們可以查看中文文檔了解更多,如果你看了這篇文章覺得自己已經(jīng)入門啦,那么恭喜你~
所有代碼已經(jīng)上傳到GitHub,傳送門: Demo代碼
nice to meet you ~ ,給個小star鼓勵下?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19035.html
摘要:作為一個有志向的前端,怎么能不搞搞全棧呢。。。地址歡迎大家多多交流前端技術(shù)啊,如果大家喜歡的話,請給我一個小小的哦 作為一個有志向的前端,怎么能不搞搞全(zhuang)棧(bi)呢。。。說搞咱就搞啊,后端就用node,數(shù)據(jù)庫就用mongodb,前端呢,呃,再搞個node的web框架express,思路搞定,開始搭建我們的環(huán)境,搭建之前還是先看看我們的目標(biāo)和成果 項目的目標(biāo)和成果 sh...
摘要:原文來源全棧初體驗前言據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了和并且做了一個應(yīng)該算是最簡單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫再重定向到頁面獲取數(shù)據(jù)庫中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺 原文來源: 全棧初體驗 前言 據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個應(yīng)該算是最簡單的前后...
摘要:原文來源全棧初體驗前言據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了和并且做了一個應(yīng)該算是最簡單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫再重定向到頁面獲取數(shù)據(jù)庫中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺 原文來源: 全棧初體驗 前言 據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個應(yīng)該算是最簡單的前后...
摘要:原文來源全棧初體驗前言據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了和并且做了一個應(yīng)該算是最簡單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫再重定向到頁面獲取數(shù)據(jù)庫中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺 原文來源: 全棧初體驗 前言 據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個應(yīng)該算是最簡單的前后...
摘要:本文源碼簡介之前剛?cè)腴T并做好了一個簡而全的純?nèi)彝暗捻椖浚瑪?shù)據(jù)都是本地模擬請求的詳情請移步這里為了真正做到數(shù)據(jù)庫的真實存取,于是又開始入門了并以此來為之前的頁面寫后臺數(shù)據(jù)接口。 本文源碼:Github 簡介: 之前剛?cè)腴Tvue并做好了一個簡而全的純vue2全家桶的項目,數(shù)據(jù)都是本地 json 模擬請求的;詳情請移步這里:vue-proj-demo 為了真正做到數(shù)據(jù)庫的真實存取,于是又...
閱讀 2458·2021-09-27 13:36
閱讀 2163·2019-08-29 18:47
閱讀 2129·2019-08-29 15:21
閱讀 1394·2019-08-29 11:14
閱讀 1979·2019-08-28 18:29
閱讀 1623·2019-08-28 18:04
閱讀 568·2019-08-26 13:58
閱讀 3206·2019-08-26 12:12