MongoDB數據庫入門基礎

MongoDB數據庫

1. MongoDB介紹

MongoDB是⼀個基於分佈式⽂件存儲的nosql數據庫。在處理⼤數據的時候會⽐MySQL更有優勢。爬⾍的數據如果上了⼀個量級,可能⽤MongoDB會⽐MySQL更好

1-1. MongoDB優勢

  1. ⽆數據結構限制
    • 沒有表結構的概念,每條記錄可以有完全不同的結構
    • 業務開發⽅便快捷
{name:'⼩明',sex:'男'}
{name:'居然',address:'東北'}
{name:'⼩紅',home:[{'⼭東'},{江⻄}]}
  1. 冗餘與擴展

    • 複製集保證數據安全
    • 分⽚擴展數據規模
  2. 良好的⽀持

    • 完善的⽂檔
    • ⻬全的驅動⽀持

1-2. 安裝

1-2-1. 在Ubuntu中安裝

  1. 在Linux中安裝MongoDB
sudo apt-get install mongodb
  1. 開啓服務
sudo service mongodb start
  1. 關閉服務
sudo service mongodb stop
  1. 重啓服務
sudo service mongodb restart

注意:
如果是系統⾮正常關閉,這樣啓動會報錯,由於mongodb⾃動被鎖上了,這是需要進⼊mongodb數據庫⽂件所在的⽬錄(/var/lib/mongodb/),刪除⽬錄中的mongodb.lock⽂件,然後再進⾏上述操作。

遠程連接:

需要修改 /etc/mongodb.conf
打開⽂件:
sudo vim /etc/mongodb.conf
註釋掉 bind 127.0.0.1

1-2-2. 在Windows中安裝

下載網址:https://www.mongodb.com/download-center/community

安裝MongoDB:https://www.cnblogs.com/chy18883701161/p/11100560.html

運行MongoDB:

  1. 把MongoDB的bin⽬錄加⼊到環境變量中
  2. 執⾏命令
 mongod --dbpath D:\MongoDB\data(路徑) # 啓動

連接MongoDB:
在環境變量設置好的前提下,使⽤以下命令mongo就可以進⼊到mongo的操作終端了

1-3. MongoDB概念介紹

SQL概念 MongoDB概念 解釋
database database 數據庫
table collection 數據庫表/集合
row document 數據記錄行/文檔
column field 字段/域
index index 索引
primary key primary key 主鍵

1-4. MongoDB三元素

三元素: 數據庫、集合、文檔

  • 文檔:就是關係型數據庫中的⼀⾏。⽂檔是⼀個對象,由鍵值對構成,是json的擴展形式
{"name": "abc", "gender": 1}
  • 集合:就是關係型數據庫中的表。可以存儲多個⽂檔,結構可以不固定。
{"name": "abc", "gender": 1}
{"name": "abc", "age": 18}
{"title": "abc", "price": 1}

2. MongoDB的基本使用

2-1. 查找數據庫

show dbs

2-2. 切換數據庫

use 數據庫

2-3. 查看當前的數據庫

db

2-4. 刪除數據庫

db.dropDatabase()

2-5. 創建數據庫

use 數據庫   // 當有數據同時存入的時候,會自動創建

2-6. 查看集合

show tables
show collections

2-7. 退出數據庫

db.shutdownServer()	//下次使用需要重啓服務

3. MongoDB中集合的基礎命令

3-1. 注意:

不⼿動創建集合,向不存在的集合中第⼀次加⼊數據時,集合會被創建出來!!!!

3-2. 手動創建集合

db.createCollection(name,options)
  • name: 要創建的集合名稱
  • options: 可選參數, 指定有關內存⼤⼩及索引的選項

db.createCollection('sub',{capped:true,size:10})
  • 參數capped:默認值爲false表示不設置上限,值爲true表示設置上限
  • 參數size:當capped值爲true時,需要制定此參數。表示上限⼤⼩,當⽂檔達到上限時,會將之前的數據覆蓋,單位爲字節

3-3. 查看集合

show collections

3-4. 刪除集合

db.集合名稱.drop()

4. MongoDB中的數據類型

  • String:字符串,必須是有效的UTF-8
  • Boolean:存儲⼀個布爾值,true或者false
  • Integer:整數可以是32位或64位,這取決於服務器
  • Double:存儲浮點數
  • Arrays:數組或列表
  • Object:嵌⼊式⽂檔
  • Null:存儲Null值Timestamp:時間戳, 表示從1970-1-1到現在的總秒數
  • Object ID是⼀個12字節的⼗六進制數
    • 前4個字節爲當前時間戳
    • 接下來3個字節的機器ID
    • 接下來的2個字節中MongoDB的服務進程id
    • 最後3個字節是簡單的增量值

5. MongoDB的增刪改查

5-1. 命名規範

  1. 不能是空字符串
  2. 不得含有特殊字符
  3. 應全部⼩寫
  4. 最多64個字節
  5. 數據庫名不能與現有系統保留庫同名,如admin,local

5-2. 插入數據(增)

db.集合名.insert({})  數據格式爲json,id不能重複,⽀持多條插⼊數據庫
db.集合名.save({數據})

5-2-1. 單條插入數據

db.name_collection.insert({x:1})

5-2-2. 多條插入數據

// 插入3<=i<10的數據
for(i=3;i<10;i++)db.name_collection.insert({x:i})

5-3. 查詢數據(查)

5-3-1. 查詢所有數據

db.name_collection.find({條件⽂檔})

5-3-2. ⽅法pretty():將結果格式化

db.集合名稱.find({條件⽂檔}).pretty()

5-3-3. 查詢單條數據

db.name_collection.findOne({條件⽂檔})

5-3-4. 查出的數據求總數

db.name_collection.find().count()

5-3-5. limit和skip

limit⽤於讀取指定數量的⽂檔
db.name_collection.find().limit(2)

skip⽤於跳過指定數量的⽂檔
db.name_collection.find().skip(2)

limit和skip同時使⽤
db.name_collection.find().skip(2).limit(2)

5-3-6. 映射

指定返回的字段,如果爲1則返回改字段,如果爲0則除了改字段外所有字段返回。id如果沒寫會默認返回

db.name_collection.find({},{_id:1})

5-3-7. 排序

// 按照年齡升序排序
db.name_collection().find().sort({age:1})

// 按照年齡降序排序
db.name_collection().find().sort({age:-1})

5-3-8. 帶有條件的查詢

// 查詢x等於100的數據
db.name_collection.find({x:100})

// 查詢x等於100,y等於99的
db.name_collection.find({x:100,y:99})

5-4. 修改數據(改)

db.集合名字.update({條件},{更新的數據})
db.集合名字.update({條件},{$set:{更新的數據}})
db.集合名字.update({條件},{$set:{更新的數據}},{multi:true})

5-5. 刪除數據(刪)

db.集合名.remove()	// 刪除所有數據,索引不會刪除
db.集合名.remove({x:100})	// 刪除滿足條件的

5-6. MongoDB常見運算符

5-6-1. 比較運算符

符號 解釋
等於 默認是等於判斷,沒有運算符
$lt 小於
$lte 小於等於
$gt 大於
$gte 大於等於

查詢示例:

db.集合名.find({y:{$gte:18}})  // 查詢大於等於18的數據

5-6-2. 範圍運算符

符號 解釋
$in
$nin
db.集合名.find({age:{$in:[18,28]}}) //

5-6-3. 邏輯運算符

or:使⽤$or,值爲數組,數組中每個元素爲json
db.集合名.find({$or:[{age:{$gt:18}},{gender:false}]})

6. MongoDB中的聚合命令

6-1. 介紹

聚合是基於數據處理的聚合管道,每個⽂檔通過⼀個由多個階段組成的管道,可以對每個階段的管道進⾏分組、過濾等功能,然後經過⼀系列的處理,輸出相應的結果。

6-2. 常用的管道

  • $group: 將集合中的文檔分組,可用於統計結果
  • $match:過濾數據,只輸出符合條件的⽂檔
  • $project:修改輸⼊⽂檔的結構
  • $sort:將輸⼊⽂檔排序後輸出
  • $limit:限制聚合管道返回的⽂檔書
  • $skip:跳過指定數量的⽂檔,並返回餘下的⽂檔

6-3. 表達式

語法: 表達式:'$列名'

常用表達式:

  • $sum: 計算總和, $sum:1 表示以⼀倍計數
  • $avg: 計算平均值
  • $min: 獲取最⼩值
  • $max: 獲取最⼤值
  • $push: 在結果⽂檔中插⼊值到⼀個數組中
  • $first: 根據資源⽂檔的排序獲取第⼀個⽂檔數據
  • $last: 根據資源⽂檔的排序獲取最後⼀個⽂檔數據

6-4. $group

作用: 將集合中的⽂檔分組,常⽤於統計結果

_id表示分組的依據,使⽤某個字段的格式爲 ‘$字段

代碼示例:

// 按照gendr分組
db.students.aggregate(
	{$group:{_id:'$gender', count:{$sum:1}}}
)

// 按照gender分組,獲取不同組的平均年齡
db.students.aggregate(
	{$group:{_id:'$gender',count:{$sum:1}, avg_age:{$avg:'$age'}}}
)

6-5. match

// match是管道命令,能將結果交給後一個管道,但是find不行

// 查詢年齡大於20的學生
db.students.aggregate(
	{$match:{age:{$gt:20}}}
)

// 查詢年齡大於20的男生,女生人數
db.students.aggregate(
	{$match:{age:{$gt:20}}},
	{$group:{_id:'$gender',count:{$sum:1}}}
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章