摘要:下載依賴包完成項(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
摘要:作為一個(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...
摘要:原文來(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)單的前后...
摘要:原文來(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)單的前后...
摘要:原文來(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)單的前后...
摘要:本文源碼簡(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í)存取,于是又...
閱讀 2480·2021-09-27 13:36
閱讀 2171·2019-08-29 18:47
閱讀 2140·2019-08-29 15:21
閱讀 1404·2019-08-29 11:14
閱讀 1989·2019-08-28 18:29
閱讀 1633·2019-08-28 18:04
閱讀 581·2019-08-26 13:58
閱讀 3217·2019-08-26 12:12