一诅福、準備工作
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ù)庫準備工作完成后月而,我們進入代碼環(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ù)庫成功伐憾,在最后勉痴,我們導出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');
});
//導出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纸肉,導出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并且導出
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é)果:
image -
我們再查看數(shù)據(jù)庫中:
image 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ù)
image
依舊是使用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入門的小練習的Demo而已粮呢,mongoose還有其他強大的操作這里沒有一一介紹,希望小伙伴們可以查看中文文檔了解更多钞艇,如果你看了這篇文章覺得自己已經(jīng)入門啦啄寡,那么恭喜你~
- 所有代碼已經(jīng)上傳到GitHub,傳送門: Demo代碼
- nice to meet you ~ 哩照,給個小star鼓勵下??