一、MongoDB資料庫 1、概念 資料庫(DataBase)是一個按照數據結構進行數據的組織,管理,存放數據的倉庫。 2、關係型資料庫 按照關係模型存儲的資料庫,數據與數據之間的關係非常密切,可以實現跨數據表查詢數據,占用更少的硬碟實現更多的數據存儲 T SQL標準的結構化查詢語言,是關係型資料庫 ...
一、MongoDB資料庫
1、概念
資料庫(DataBase)是一個按照數據結構進行數據的組織,管理,存放數據的倉庫。
2、關係型資料庫
按照關係模型存儲的資料庫,數據與數據之間的關係非常密切,可以實現跨數據表查詢數據,占用更少的硬碟實現更多的數據存儲
T-SQL標準的結構化查詢語言,是關係型資料庫的通用查詢語言
常見的關係型資料庫:Mysql sql-server access sqlite.....
結構:一臺伺服器==》資料庫==》數據表==》數據行
3、非關係型資料庫
不按關係模型存儲的資料庫,統稱為nosql
第一層含義:不是SQL,不是關係型資料庫
第二層含義:Not Only SQL,不僅僅是SQL
結構:一臺伺服器==》資料庫===》集合==》文檔
4、mongDB
mongoDB 是一個基於分散式文件存儲的資料庫,目前是世界上用得最多的非關係型資料庫,也是最像關係型的非關係型資料庫
MongoDB以BSON(二進位+JSON)格式進行數據存儲,可以直接存儲,可以直接存儲對象、數組
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。
使用
- 官網下載安裝mongoDB軟體
- 設置環境變數,mongo命令所在位置:C:\program Files\MongoDB\server\3.2\bin 添加到環境變數 修改用戶下PATH的值
創建文件夾
在非系統盤根目錄創建一個文件夾mongodb,在創建兩個子文件夾db和log
將mongoDB掛載成為windows服務
1.使用命令掛載服務
mongod --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\mongod.log" --install --serviceName "MongoDB"
2.使用服務視窗界面啟動服務
在電腦點右鍵管理--->服務與應用程式---->服務----->找到MongoDB右鍵啟用
3.或者使用命令行啟動服務
net start mongodb 開啟服務
net stop mongodb 關閉服務
sc delete mongodb 卸載服務
常見問題
32位操作系統 必須加 --storageEngine mmapv1
windows8 windows10 打開命令行用管理員方式打開
5、資料庫常用操作
進入資料庫管理模式
- 在命令行中運行:mongo 進入數據管理模式
- 在數據管理模式中只能執行資料庫命令,不能執行其他命令
- exit 退出資料庫管理模式
資料庫命令:
- 1.顯示所有的數據列表
show dbs - 2.創建資料庫/進入資料庫
use 資料庫名
如果資料庫名不存在,則創建
如果資料庫已存在,則進入 - 3.查看當前資料庫是誰
db - 4.刪除資料庫
db.dropDatabase()
集合命令:
- 1.顯示當前資料庫中所有集合
show collections - 2.創建集合
db.集合名.insert({})
通常,在創建數據時自動創建集合,不需要單獨創建 - 3.刪除集合
db.集合名.drop()
文檔(數據)的操作
- 1.新增文檔 (增)
db.集合名.insert({})
db.集合名.save({JSON數據})- 例如:
db.user.insert({"name":"admin","password":"12342423"}); db.user.save({"username":"admin","password":"12342423"}); /* insert和save方法的區別: .insert() 向集合中插入一條數據【推薦使用】 .save() 向集合中添加一條數據,如果集合中已存在該數據則更新 */
- 2.刪除數據(刪)
db.集合名.remove({}) //刪除當前集合中的所有數據
db.集合名.remove({條件}) //刪除指定的數據- 例如:
db.user.remove({"age":"18"}) // 註意:由於刪除和更新會對數據造成極大影響,需謹慎
- 3.修改數據(改)
db.集合名.update({查找對象,修改結果})- 註意,會修改整條數據
- 例如:
db.user.update({"name":"張三"},{"age":18}) //改動整條數據
- 4.查看文檔數據(查)
db.集合名.find() //查找當前集合中的所有數據
db.集合名.find({條件對象}) //將符合條件的數據查出來
db.集合名.findOne() //查詢到的第一個對象
db.集合名.find().pretty() //將找到的數據已格式化的結果顯示出來
6、mongoDB高級用法
按指定條件查詢
- 大於 - $gt
db.集合名.find({欄位名:{$gt:值}})
- 大於等於 - $gte
db.集合名.find({欄位名:{$gte:值}})
- 小於 - $lt
db.集合名.find({欄位名:{$lt:值}})
- 小於等於 - $lte
db.集合名.find({欄位名:{$lte:值}})
- 使用 (<) 和 (>) 查詢指定範圍
db.集合名.find({欄位名:{$gt:小值,$lt:大值}})
- 使用數組指定範圍 - $in
db.集合名.find({欄位名:{$in:[1,2,3,4]}})
- 查找數組元素個數 - $size
db.集合名.find({欄位名:{$size:長度}})
- 判斷是否存在 - $exists
db.集合名.find({欄位名:{$exists:true|false}})
- 查找多個條件時,符合其中一個就找出來 - $or
db.集合名.find({欄位名:{$or:[{...},{...},...]}})
排序
db.集合名.find().sort({"key":-1,"ke2":1,...}) //1代表升序,-1代表降序
限定輸出limit() skip()
db.集合名.find().limit('數字') //限定輸出數據的條數
db.集合名.find().skip('數字') //跳過指定的數據條數
//這兩個限定輸出的語句主要用於分頁
模糊查詢
db.集合名.find({欄位名:/值/ig}) //使用正則表達式
二、mongoose操作資料庫
1、概念
是一個基於nodeJS的用於操作mongodb資料庫的第三方模塊
2、安裝
npm install mongoose
3、使用
在routes目錄下,在需要用到資料庫的路由添加如下代碼:
var mongoose = require('mongoose');
//連接資料庫
mongoose.connect("mongodb://主機名:27017/資料庫名",function(err){
if(err){
throw err;
}else{
console.log("資料庫連接成功");
}
})
//定義骨架
//schema骨架是一種數據結構聲明,不具備資料庫的操作能力
//骨架類型:String、Number、Date、Buffer、ObjectId、Array...
var userSchema = new mongoose.Schema({
name:String,
age:{
type:Number,
default:0
},
sex:{
type:String
}
})
//創建模型
//model模型是一種根據骨架創建出的一個模型,具備資料庫操作能力,通常用於讀取資料庫
var listModel = mongoose.model("模型名稱","骨架","集合名稱");
//創建實體Entity
//Entity實體是根據模型創建出的一個實例,具備資料庫操作能力,通常用於寫數據(新增,修改,刪除)
var list = new listModel();
list.屬性名 = 值;
list.save(); //將添到實例上的屬性保存到資料庫中
list.remove();//刪除數據
4、數據操作
查詢數據/讀取數據
//根據條件進行數據查詢,可以找出多條數據
模型.find({條件},function(err,data){
//data是從資料庫中讀取到的數據
//find方法找出來的數據一定是一個數組,即使沒有數據也是一個空數組
})
//通過ID查找一條數據
模型.findById('id',function(err,data){
//find方法找出來的數據一定是一個對象
})
//另一種常用方法(為了實現更好的鏈式調用)
模型.find({條件}).exec(function(err,data){})
新增數據
var list = new listModel(); //根據模型創建實例
list.name = '張三';
list.age =23;
//將新增的數據保存到資料庫中
list.save(function(err){
console.log("新增成功");
})
//註意:骨架中沒有定義的屬性及類型,不能添加到資料庫
刪除數據
/*
思想:
第一步:找出要被刪除的數據,
第二部:調用remove()方法刪除數據
*/
listModel.findById(id).exec(function(err,data){
data.remove(function(err){});
})
修改數據
/*
思想:
第一步:找出要被修改的數據,
第二部:將數據修改後保存回資料庫
*/
listModel.findById(id).exec(function(err,data){
data.name = 新的值;
data.age = 新的值;
...
data.save(function(err){})
})