1. 程式人生 > >MongoDB資料庫的特點及命令總結

MongoDB資料庫的特點及命令總結

SQL: mysql,Oracle,sqlserver,db2
特點及應用場景:
1.高度事務性場景---> 銀行,會計,倉庫,貿易,需要大量的原子操作
2.資料儲存有規範的表結構設計,預先定義好 明確的欄位
3.資料價值高,對安全性和穩定性要求高
4.需要持久化儲存的"冷資料"(不需要經常讀寫的資料)
5.需要通過SQL語言來支援的場景

NoSQL:
redis: key:value(string,list,hash,set,zset)
mondodb : {name : "小明", age : 18}
1.靈活的資料結構,需要事先設計 資料的增刪改 的欄位
2.高度收縮性場景,社交網路,熱點資訊
3.處理熱資料(需要經常讀寫的資料)


4.更容易擴充套件
每個資料庫都有固定的埠:
mysql:3306, redis:6379, MongoDB:27017

========================MongoDB常用的命令
MongoDB的命令前一個單詞小寫,後面單詞的首字母大寫!!!
1.啟動服務端:sudo mongod

2.啟動shell客戶端:mongo

3.檢視所有資料庫--->show dbs

4.切換資料庫------>use.資料庫名

5.檢視當前所在的資料庫---->db

6.檢視當前所在資料庫裡面的所有集合(相當於MySQL的表)--->show collections

7.檢視資料庫指定集合裡面的所有資料--->db.集合名.find()

8.刪除當前資料庫--->db.dropDatabase()

9.退出------>Ctrl+C
使用者認證方式注意事項:
1. 第一次啟動MongoDB是沒有使用者的,所以按 普通方式啟動 MongoDB服務,然後再建立 root 使用者。
2. 第二次啟動MongoDB服務已經使用者了,所以按 --auth 方式啟動MongoDB服務,然後再切換使用者。


==========================>使用MongoDB命令的注意點

1.在使用MongoDB命令時,如果命令是一個單詞,則預設小寫,
如果是多個單詞組合,則第一個單詞預設小寫,後面單詞的首字母大寫,如:刪除當前資料庫的命令dropDatabase()

2.MongoDB命令的引數傳遞:一般都是以鍵值對的形式傳遞

3.一個MongoDB可以有多個數據庫,一個數據庫可以有多個集合,
一個集合可以有多條資料(data),每條資料都是字典鍵值對形式進行儲存

4.MongoDB的資料庫不需要提前建立,通過use 資料庫名,可以直接切換使用,如果資料庫裡面沒有資料,則不會被建立,
資料庫裡面有資料才會被建立

========================>MongoDB資料庫的增.刪.改.查.
--------------------MongoDB資料庫的增加:(insert)
1.直接增加一個文件:
db.stu.insert({_id : 1, name "諸葛亮", age : 45, hometown : "蜀國"})

2.先建立一個空文件,再按照欄位進行增加:
data = {}
data._id = 2
data.name = "劉備"
data.age = 48
data.hometown = "蜀國"
db.stu.insert(data)

--------------------MongoDB資料庫的刪除(remove)
1.remove(age:32) 預設刪除符合條件的所有資料
# 刪除年齡為32的所有資料
db.stu.remove({age:32})

2.remove({age:32},{justone:true}),新增第二個引數,則表示只刪除滿足條件的第一條資料
db.stu.remove({age:32},{justOne:true})

3.remove({}) 新增空條件,則刪除所有資料

4.db.stu.drop() 刪除當前資料庫

--------------------MongoDB資料庫的更新:(update)
1.update() 接收兩個引數,第一個引數指定要更新的資料,第二個引數是更新後的引數
如果有兩條資料都滿足第一個引數,則只更新第一條資料
db.stu.update({age:32},{age:33}) # 表示把年紀為32的資料用年紀33來替換,_id不變,其他全部被替換

2.不做全部替換,只替換指定欄位
# 通過$set修飾,只處理指定欄位,有則修改,沒有則增加
db.stu.update({age:32},{$set: {age:33,position:"丞相"}})

3.update()預設只處理滿足條件的第一條資料,給update()新增第三個引數,處理全部滿足條件的資料
db.stu.update({age:32},{$set:{age:33,hometwon:"蜀國"}},{multi:true})

--------------------MongoDB資料庫的增加 + 修改:(save)
save() 根據id值進行處理:
1.如果id不存在,則增加該資料
db.stu.save({_id:4,name:"趙雲",age:34,hometwon:"蜀國"})
2.如果id存在,則修改資料
db.stu.save({_id:4,name:"姜維",age:34,hometwon:"蜀國"})

insert(),update(),save()的使用區別:
insert()只能新增沒有的id,如果該id值存在,則會報錯
update()可以修改指定欄位,而save()不能

--------------------MongoDB資料庫的查詢 (find())
1.find()不指定查詢條件,則預設查詢全部

2.findOne()只查詢第一條資料

3.比較運算子(主要是數字之間的比較)
大於:$gt,大於或等於:$gte
小於:$lt,小於或等於:$lte
不等於:$ne

4.邏輯運算子 表示多個獨立條件的邏輯關係
預設是and連結
db.stu.find({age:18,hometwon:"桃花島"})
# 表示兩個獨立的條件邏輯關係and
db.stu.find({$and:
[{age:18},{hometown:"桃花島"}]
})
# 表示兩個獨立的條件邏輯關係or或
db.stu.find({$or:[{age:18},{hometown:"桃花島"}]})

# 範圍運算子in
db.stu.find({age:{$in:[18,20,16,40,45]}})
db.stu.find({hometown:{$in:["桃花島","大理","蒙古"]}})

正則表示式
用"//"表示通過正則表示式查詢
db.stu.find({name:/^黃/})

用regex來表示正則表示式查詢
db.stu.find({name:{$regex:"^黃"}})

7. 自定義函式查詢
# 迭代每一個文件並判斷該文件的 hometown是否不等於 蒙古,如果條件成立則符合查詢
db.stu.find({$where : function() {return this.hometown != "蒙古"} })