文章目錄
非關係性數據庫:Mongo
Mongo
介紹
- 是一種非關係性數據庫,不像
MySQL
那樣有很多條條框框的約束,想怎麼存就怎麼存。 - 什麼叫數據庫,集合,文檔?請看下面的栗子。
舉個栗子:教學
- 前提:我想創建一個論壇,論壇裏又有很多用戶,所以我需要一個論壇數據庫,其中還要一個用戶集合(表)。
- 然後切換數據庫,並查看當前數據庫中的集合
- 我們可以通過
db.集合名.find()
方法查看集合中的所有文檔(集合中的每條信息叫做文檔)
常用操作
連接數據庫
mongo
查看所有數據庫
show dbs
切換數據庫
use 數據庫名稱
展示數據庫中的集合
show collections
展示集合中的所有文檔
db.users.finds()
刪除集合中的所有文檔
> db.users.drop()
true
Mongoose 插件
官方定義如下:編寫MongoDB驗證,轉換和業務邏輯是非常麻煩的. 所以我們發明了Mongoose.
我個人的理解:就是類似JavaScript
和jQuery
的關係。Mongoose
相當於jQuery
。
- 數據庫是不需要輸入命令的時候建立的,它是在你插入數據的時候就給你建立的
建立文檔結構 Schema
- 用戶表中的用戶信息不能是沒有規律的吧,需要有用戶名,性別,年齡等等信息,我們需要這樣一個規範,用來更好的設計,儲存數據庫,方便以後的查閱,這就引入了文檔結構 Schema
- 類似一下的感覺
- 首先在後臺中,新建一個文件夾,叫啥隨便你,這個文件夾作用是:用來存儲文檔的格式,也就是規定了每條數據都有啥屬性。
- 這個
js
文件連接了數據庫,並且引入了mongoose
插件 - 記得最後要導出,導出的名字不要寫成複數,也就是我上圖中的
module.exports = User
,因爲插件會幫你轉成複數
const mongoose = require('mongoose')
const dbName = 'myWeibo'
mongoose.connect(`mongodb://localhost:27017/${dbName}`, {useNewUrlParser: true, useUnifiedTopology: true})
// 設置文檔結構
var Schema = mongoose.Schema;
var userSchema = new Schema({
username:String,
psw:String
})
const User = mongoose.model('User', userSchema)
module.exports = User
操作
添加數據
- 需要先引入文檔結構
- 然後通過
.save
方法保存
// 引入用戶表格式 Schema
// weiboUser 是我的文檔結構的名字,你的自己看看是啥
const weiboUser = require('../module/weiboUser')
new weiboUser(需要保存的數據).save((err, ret) => {
if(err){
// 保存失敗
}else{
// 保存成功
}
})
刪除數據
根據條件刪除文檔
weiboUser.remove({'username': '王先生'},{
password:'123'
}, function (err,ret) {
if(err) {
console.log('刪除失敗')
} else {
console.log('刪除成功')
console.log(ret);
// { n: 1, ok: 1, deletedCount: 1 }
}
})
查數據
- 可以通過
文檔結構.find(查詢的數據,回調函數(err, ret){})
來查詢數據,其中ret
就是查詢到的文檔(數據) - 也可以查詢一個
findOne()
weiboUser.find({'username':data.username}, (err, ret) => {
if(ret === null) {
// 如果沒查到
} else {
// 如果查到了
}
})
修改數據
通過id
來修改數據
其中的ret
返回的是修改前的數據內容
// 刪除
weiboUser.findByIdAndUpdate('5effddd9630b7d430c4e79aa',{
psw:'123'
}, function (err,ret) {
if(err) {
console.log('修改失敗')
} else {
console.log('修改成功')
console.log(ret);
// 他會返回修改前的數據
// { _id: 5effddd9630b7d430c4e79aa, username: '王先生', psw: '1', __v: 0 }
}
})