1. MongoDB 的基本操作
-- 檢視資料庫
sd
-- 切換資料庫 如果沒有對應的資料庫則建立
use 資料庫名
-- 建立集合
db.createCollection("集合名")
-- 檢視集合
show tables
show collections
-- 删除集合
db.集合名.drop()
-- 删除目前資料庫
db.dropDatabase()
2. MongoDB 集合資料操作(CURD)
2.1 資料添加
-
文檔的資料結構和插入單條資料 db.集合名.insert(文檔)
JSON
基本一樣。
所有存儲在集合中的資料都是
格式。BSON
是一種類BSON
的一種二進制形式的存儲格式,簡稱json
。Binary JSON
- 例子
沒有指定db.resume_preview.insert({name:"張曉峰",birthday:new ISODate("2000-07- 01"),expectSalary:15000,gender:0,city:"bj"})
這個字段系統會自動生成,也可以指定_id
_id
類型是_id
類型是一個ObjectId
位元組12
類型資料,有以下格式:BSON
- 前
個位元組表示時間戳4
來擷取ObjectId("對象Id字元串").getTimestamp()
- 接下來的
個位元組是機器辨別碼3
- 緊接的兩個位元組由程序
組成(id
)PID
- 最後三個位元組是随機數
- 前
- 插入多條資料
db.集合名.insert([文檔,文檔])
2.2 資料查詢
2.2.1 比較條件查詢
db.集合名.find(條件)
操作 | 條件格式 | 例子 | RDBMS 中的條件 |
---|---|---|---|
等于 | {key:value} | db.col.find({字段名:值}).pretty() | where 字段名 = 值 |
大于 | {key:{$gt:value}} | db.col.find({字段名:{$gt:值}}).pretty() | where 字段名 > 值 |
小于 | {key:{$lt:value}} | db.col.find({字段名:{$lt:值}}).pretty() | where 字段名 < 值 |
大于等于 | {key:{$gte:value}} | db.col.find({字段名:{$gte:值}}).pretty() | where 字段名 >= 值 |
小于等于 | {key:{$lte:value}} | db.col.find({字段名:{$lte:值}}).pretty() | where 字段名 <= 值 |
不等于 | {key:{$ne:value}} | db.col.find({字段名:{$ne:值}}).pretty() | where 字段名 != 值 |
2.2.2 邏輯條件查詢
-
條件and
的MongoDB
方法可以傳入多個鍵(find()
),每個鍵(key
) 以逗号隔開,即正常key
的SQL
條件AND
db.集合名.find({key1:value1, key2:value2}).pretty()
-
條件or
db.集合名.find({$or:[{key1:value1}, {key2:value2}]}).pretty()
-
條件not
db.集合名.find({key:{$not:{$操作符:value}}).pretty()
2.2.3 分頁查詢
db.集合名.find({條件}).sort({排序字段:排序方式})).skip(跳過的行數).limit(一頁顯示多少資料)
2.3 資料更新
$set :設定字段值
$unset :删除指定字段
$inc:對修改的值進行自增
db.集合名.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
})
參數說明:
-
:query
的查詢條件,類似update
查詢内sql update
後面的。where
-
update
的對象和一些更新的操作符(如update
)等,也可以了解為$set,$inc...
中sql update
後面的set
-
可選,這個參數的意思是,如果不存在upsert
的記錄,是否插入update
,objNew
為插入,預設 是true
,不插入。false
-
multi
可選,
預設是MongoDB
,隻更新找到的第一條記錄,如果這個參數為false
,就把按條件查 出來多條記錄全部更新。true
-
可選,用來指定writeConcern
mongod
對寫操作的回執行為,比如寫的行為是否需要确認。
舉例:
db.集合名.update({條件},{$set:{字段名:值}},{multi:true})
writeConcern
包括以下字段:
{ w: <value>, j: <boolean>, wtimeout: <number> }
-
w:
指定寫操作傳播到的成員數量
比如:
(預設):則要求得到寫操作已經傳播到獨立的w=1
執行個體或副本集的Mongod
成員的确認primary
:則不要求确認寫操作,可能會傳回w=0
和socket exceptions
networking errors
:要求得到寫操作已經傳播到大多數具有存儲資料具有投票的(w="majority"
)成員(也就是data-bearing voting
值大于 的成員)的确認members[n].votes
-
要求得到j:
Mongodb
的寫操作已經寫到硬碟日志的确認
比如:
:要求得到j=true
(Mongodb
指定的執行個體個數)的寫操作已經寫到硬碟日志的确認。w
本身并不保證 因為副本集故障而不會復原。j=true
-
:指定wtimeout
的時間限制,隻适用于write concern
的情況w>1
在超過指定時間後寫操作會傳回wtimeout
,即使寫操作最後執行成功,當這些寫操作傳回時,error
不會撤消在MongoDB
wtimeout
時間限制之前執行成功的資料修改。
如果未指定
選項且未指定wtimeout
級别,則寫入操作将無限期阻止。 指定write concern
值為 等同于沒有wtimeout
選項。wtimeout
2.4 資料删除
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
參數說明:
-
:(可選)删除的文檔的條件。query
-
: (可選)如果設為justOne
或true
,則隻删除一個文檔,如果不設定該參數,或使用預設值1
,則删除所有比對條件的文檔。false
-
:(可選)用來指定writeConcern
對寫操作的回執行為。mongod