MongoDB介紹以及安裝和CRUD操作實例
一、基本信息
數據庫主要分成兩種:
一、關係型數據庫(RDBMS)
·MySQL、Oracle、DB2、SQL Server……
·關係數據庫中全都是表
二、非關係型數據庫
·MongoDB、Redis……
·鍵值對數據庫
·文檔數據庫MongoDB
MongoDB的數據模型是面向文檔的,所謂文檔是一種類似於JSON的結構,簡單理解MongoDB這個數據庫中存的是各種各樣的JSON。(BSON—二進制的 JSON)
1.數據庫(database)
數據庫是一個倉庫,在倉庫中可以存放集合。
2.集合(collection)
集合類似於數組,在集合中可以存放文檔。
3.文檔(document)
文檔數據庫中的最小單位,我們存儲和操作的內容都是文檔。
·MongoDB安裝包下載地址:
·MongoDB的版本偶數版本爲穩定版,奇數版本爲開發版。
·MongoDB對於32位系統支持不佳,所3.2版本以後沒有再對32位系統的支持。
一、安裝MongoDB
二、配置環境變量
1.找到安裝目錄 D:\software\MongoDB\Server\3.6\bin
2.
3.檢查安裝成功沒有
在c盤 根目錄下創建一個 文件夾 data 再在data下面創建一個文件夾db
4.啓動 MongoDB 服務器 (數據庫的服務器,用來存儲數據的)
啓動方法一:打開cmd 命令窗口,輸入 mongod 啓動 mongodb 服務器
啓動方法二:若想要自定義數據存儲位置 和 MongoDB 服務器使用的 端口號
則啓動時候可以輸入 mongod --dpath D:\data\db --port 123
5.連接MongoDB服務器(數據庫的客戶端,用來操作數據)
第4步的窗口不要關閉,再打開一個 cmd 命令窗口,輸入 mongo 結尾處出現 “ > ” 則表示連接成功
將MongoDB設置爲系統服務,可以自動在後臺啓動,不需要每次都手動重啓
二、設置在後臺啓動MongoDB
1.在 D 盤根目錄下創建 文件夾
cd D:\
mkdir D:\data\db
mkdir D:\data\log
2.在安裝目錄下面創建配置文件
D:\software\MongoDB\Server\3.6\mongod.cfg
3.在配置文件中添加內容,寫 日誌路徑 和 數據存儲路徑
systemLog:
destination: "file"
path: "c:\\data\\log\\mongod.log"
storage:
dbPath: "c:\\data\\db"
4.以管理員方式打開cmd ,執行以下命令
sc.exe create MongoDB binPath= "\"D:\software\MongoDB\Server\3.6\bin\mongod.exe\" --service --config=\"D:\software\MongoDB\Server\3.6\mongod.cfg\"" DisplayName= "MongoDB" start= auto
5.啓動MongoDB 服務,打開 任務管理器 ,找到 MongoDB 服務 右鍵啓動
6.如果啓動失敗,證明上邊的操作有誤,在控制檯輸入 sc delete MongoDB 刪除之前配置的服務然後從第一步再來一次
三、MongoDB 基本命令
查看幾個數據
show dbs
進入數據庫
use 數據庫名
查看當前所在數據庫
db
查看數據庫中有幾個集合
show collections
**注意:**在MongoDB中不需要手動創建 數據庫 和 集合,當我們在創建文檔時,如果文檔所在的集合或數據庫不存在 則 自動創建數據庫 和 集合
數據庫的CRUD的操作 官網文檔:https://docs.mongodb.com/v3.6/crud/
操作語法文檔下載路徑: MongoDB語法操作文檔
-
向數據庫中插入文檔 db 代表當前數據庫
db.集合名.insertOne(doc)
例:
db.inventory.insertOne( { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } } ) /* 插入數據 */ db.inventory.insert([ {name:"測試",age:18,sex:0,hobby:"籃球",test:true}, {name:"測試2",age:19,sex:1,hobby:"籃球2",test:false}, {name:"測試3",age:20,sex:0,hobby:"籃球3",test:true} ]); /* 查詢 */ db.inventory.find({}); /* 調用此方法可以生成id */ ObjectId(); /* 可以自定義id */ db.inventory.insert( {_id:"helloworld",name:"測試",age:18,sex:0,hobby:"籃球",test:true} )
# 插入的方法 db.collection.insertOne() 插入 一個 文檔到 一個集合 db.collection.insertMany() 插入 多個 文檔到 一個集合 db.collection.insert() 插入 一個 或 多個 文檔到 一個集合
-
查詢數據
/* 查詢 在find 裏面輸入查詢條件 find() 返回的是一個數組 findOne() 返回的是一個對象 */ db.inventory.find({}); /* 取返回數組的第一個對象 */ db.inventory.find({age:18})[0]; db.inventory.find({age:18})[0].name; /* 多條件查詢 */ db.inventory.find({age:18,_id:"helloworld"}); /* findOne 返回的是一個對象 */ db.inventory.findOne({age:18}).name; /* .count() 是統計數目 */ db.inventory.find({age:18}).count();
-
修改操作
/* 修改 db.collection.update(查詢條件,新對象) update() 默認情況下會使用新對象來替換舊的對象, update() 默認情況只會修改一個 如果需要修改指定的屬性 $set:{} $unset:{} 可以用來刪除文檔的指定屬性 */ db.inventory.find(); /* - update() 默認情況下會使用新對象來替換舊的對象 */ db.inventory.update({_id:"helloworld"},{age:20}); /* 如果需要修改指定的屬性 $set:{} */ db.inventory.update( {_id:"helloworld"}, {$set:{ age:21, name:"姓名" }} ); /* $unset:{} 可以用來刪除文檔的指定屬性 */ db.inventory.update( {_id:"helloworld"}, {$unset:{ hobby:"123" }} ); /* updateMany 可以修改多個 */ db.inventory.updateMany( {age:18}, {$set:{ hobby:"123" }} ); /* update 加上 multi屬性後可以修改多個 */ db.inventory.update( {age:18}, {$set:{ hobby:"234" }}, { multi:true } );
-
刪除數據
/* db.collection.remove() db.collection.deleteOne() db.collection.deleteMany() */ /* 默認情況會刪除符合條件的多個 */ db.inventory.remove({age:18}); /* 若果用remove刪除一個 後面加一個boolean值是否刪除一個 則 */ db.inventory.remove({age:18}, true); /* 刪除 集合 */ db.inventory.drop(); /* 刪除當前數據庫 */ db.dropDatabase();
部分高級查詢:
//13.查尊喜歡電影hero的文檔 //MongoDB支直接通過內獲文檔的屬性進行查詢,如果要查詢內鼓文檔則可以通過。的形式來匹配 //如果要通過內蒙文檔來對文檔進行查詢,此時屬性名必須使用引號db.users.find({'hobby.movies':"hero"}); //14.向tangsengp添加一個新的電影Interstellar //$push 用於向數組中添加一個薪的元素 //$addToSet 用於向數組中添加一個薪的元素,但是不會重複,若存在重複的則 不會再添加 db.users.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}}); db.users.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interstellar"}}); //17.向numbers中插入20000條數 for(var i=l;i<=20000;i++){ db.numbers.insert({num:i}) }; var arr = []; for (var i=1 ; i <= 20000 ; i++) { arr.push({num:i}); } db.numbers.insert(arr); //21.查尊numbers中 numt於40小於50的文檔 db.numbers.find({num:{$gt:40,$1t:50}}); // limit() 設置顯示數據的上限 // 查看前 10 條 db.numbers.find().limit(10); // 查看第 11 到 20 // skip( (頁碼 -1)* 每頁顯示條數) ).limit(每頁顯示條數) db.numbers.find().skip(10).limit(10);
部分高級練習:
/* 27.查詢工資小於2000的員工 */
db.emp.find({sal:{$lt:2000}});
/* 28.查詢工資在1000-2000之間的員工 */
db.emp.find({sal:{$gt:1000,$lt:2000}});
/* 29.查詢工資小於1000或大於2500的員工 lt 小於 gt 大於 */
db.emp.find({$or:[{sal:{$lt:1000}},{sal:{$gt:2500}}]});
/* 30.查詢財務部的所有員工 */
var deptno = db.dept.findOne({dname:"財務部"}).deptno;
db.emp.find({depno:deptno});
/* 32.查詢所有mgr爲7698的所有員工 */
db.emp.find({mgr:7698});
/* 多條件查詢 */
db.emp.find({mgr:7698,empno:7499});
/* 33.爲所有薪資低於1000的員工增加工資400元 inc 自增*/
db.emp.updateMany({sal:{$lte:1000}},{$inc:{sal:400}});
/* sort() 可以用來指定文檔的排序規則,sort() 需要傳遞一個對象來指定排序規則 */
/* 1表示升序 -1表示降序 */
db.emp.find({}).sort({sal:1,empno:-1});
// limit skip sort 可以任意的順序進行調用 skip 和 limit 用來分頁 例:當前頁從1開始 skip((當前頁數-1)*每頁顯示條數).limit(每頁顯示條數)
db.emp.find({}).sort({sal:1,empno:-1}).skip(0).limit(10);
// 在查詢時,可以在 第二個參數的位置 來設置查詢結果 投影 id默認都會顯示
db.emp.find({},{ename:1});
// 顯示 name 和 sal _id爲0則表示不顯示
db.emp.find({},{ename:1,_id:0,sal:2});
MongoDB 圖形化管理工具 https://www.mongodbmanager.com/download
MongoDB中的數據關係:
/*
一對一 one to one
一對多 one to many / 多對一 many to one
多對多 many to many
*/
/* 一對一 */
db.wifeAndHusband.insert([
{
name:"黃蓉”,
husband:{
name:"郭靖"
}
},
{
name:"A同學”,
husband:{
name:"B同學"
}
}
]);
/* 一對多 用戶 和 訂單 */
db.users.insert([
{
username:"swk"
},{
username:"zbj"
}
]);
db.order.insert({
list:["蘋果”,”香蒸”,”大鴨梨”],
user_id:ObjectId("59c47e35241d8d36ald50ddf")
});
//查撥用戶SWk的訂單
var user_id=db.users.findOne({username:"zbj"})._id;
db.order.find({user_id:user_id});
/* 多對多 */
db.teachers.insert([
{name:"洪七公"},
{name:"黃藥師"},
{name:"龜仙人"}
]);
db.stus.insert([
{
name:"郭靖”,
tech_ids:[
ObjectId("59c4806d241d8d36ald50de4"),
ObjectId("59c4806d241d8d36a1d50de5")
]
},
{
name:"孫福空”,
tech_ids:[
ObjectId("59c4806d241d8d36ald50dfr3"),
ObjectId("59c4806d241d8d36a1d50dc6")
]
}
]);