本文為轉載膊升,原文:MongoDB的增刪改查基本命令
創(chuàng)建庫
命令:
> use dbName
若數(shù)據(jù)庫存在,則該命令的效果是切換到當前數(shù)據(jù)庫;若該數(shù)據(jù)庫不存在亚亲,則該命令可以創(chuàng)建數(shù)據(jù)庫,并切換到該數(shù)據(jù)庫腐缤。
下面是創(chuàng)建mydb
數(shù)據(jù)庫的截圖:
創(chuàng)建集合
命令:
> db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>} )
相關參數(shù)說明:
name
:集合的名字
capped
:是否啟用集合限制捌归,如果開啟需要制定一個限制條件,默認為不啟用岭粤,這個參數(shù)沒有實際意義
size
:限制集合使用空間的大小惜索,默認為沒有限制
max
:集合中最大條數(shù)限制,默認為沒有限制
autoIndexId
:是否使用_id作為索引剃浇,默認為使用(true或false)
size的優(yōu)先級比max要高
常用方法介紹:
- 一般來說巾兆,我們創(chuàng)建集合用
db.createCollection(name)
,如:db.createCollection("log")
,創(chuàng)建一個名字為log的集合猎物,沒有任何的大小,數(shù)量限制角塑,使用_id作為默認索引; - 限制集合空間的大小:
db.createCollection("log",{size:1024})
或db.createCollection("log",{capped:true,size:1024})
,創(chuàng)建一個名字為log集合茎刚,限制它的空間大小為1M毙芜,如果超過1M的大小,則會刪除最早的記錄窒朋; - 限制集合的最大條數(shù):
db.createCollection("log",{max:1024})
搀罢,創(chuàng)建一個名字為log集合,最大條數(shù)為1024條侥猩,超過1024再插入數(shù)據(jù)的話會刪除最早的一條記錄榔至。這個不能使用capped:true,否則會報錯拭宁; - 即限制最大條數(shù)有限制使用空間大新逋恕:
db.createCollection("log",{size:1024,max:1024})或db.createCollection("log",{capped:true,size:1024,max:1024})
杰标,限制集合最大使用空間為1M,最大條數(shù)為1024條
下面是在mydb
數(shù)據(jù)中創(chuàng)建students
集合的截圖:
數(shù)據(jù)插入
命令:
db.collectionName.insert(value)
其中value
是Bson
格式的數(shù)據(jù)宙攻。
接下來柔滔,我們便在我們的students
集合中添加數(shù)據(jù):
> db.students.insert({
name:"tom",
age:18,
gender:"male",
grade:"Freshman"
})
結果如下:
下面我們多插入幾條數(shù)據(jù)咆霜,便于后面的查詢:
db.students.insert({
name:"bob",
age:19,
gender:"male",
grade:"Sophomore"
})
db.students.insert({
name:"Oliver",
age:21,
gender:"male",
grade:"Junior"
})
db.students.insert({
name:"Alice",
age:22,
gender:"female",
grade:"Senior"
})
db.students.insert({
name:"Lily",
age:21,
gender:"female",
grade:"Senior"
})
db.students.insert({
name:"Klay",
age:20,
gender:"male",
grade:"Sophomore"
})
結果:
查詢
簡單查詢
命令:
> db.collectionName.find(option)
比如以下命令就是查詢出我們之前插入到students
的全部數(shù)據(jù):
db.students.find()
當然你也可以在命令的后面加一個
pretty()
方法下翎,這樣查詢出來的結果會被格式化:
db.students.find().pretty()
結果:
(截圖沒截完全)
這樣的話,數(shù)據(jù)可讀性會高一點。
查詢name為Alice的學生:
db.students.find({name:"Alice"}).pretty()
條件操作符
MongDB的條件操作符如下:
-
>
: 大于 - $gt #greater than -
<
:小于 - $lt # less than -
<=
:小于等于 - $lte -
>=
:大于等于 -$gte -
!=
:不等于 -$ne
比如查詢年齡大于20歲的學生:
db.students.find({age:{$gt:20}})
類型操作符
另外萌焰,mongodb還有一種按照數(shù)據(jù)類型來查詢的操作符$type
:
type的值如下:
- 雙精度型-1
- 字符串-2
- 對象-3
- 數(shù)組-4
- 二進制數(shù)據(jù)-5
- 對象ID-7
- 布爾類型-8
- 數(shù)據(jù)-9
- 空-10
- 正則表達式-11
- JS代碼-13
- 符號-14
- 有作用域的JS代碼-15
- 32位整型數(shù)-16
- 時間戳-17
- 64位整型數(shù)-18
- Min key-255
- Max key-127
例如扒俯,查找name
是字符串的文檔記錄:
db.students.find({name:{$type:2}})
與
查找年齡大于等于20歲的男學生:
db.students.find({age:{$gte:20},gender:"male"})
或($in)
查詢大一族购、大二的學生:
db.students.find({grade:{$in:["Freshman","Sophomore"]}})
非($nin)
查詢不是大一、大二的學生:
db.students.find({grade:{$nin:["Freshman","Sophomore"]}})
正則匹配
查詢姓名包含li
的學生:
db.students.find({name:/li/})
where
查找students集合中包含name
字段的數(shù)據(jù):
db.getCollection("students").find({$where:function(){ return !!this.name; } })
limit 與 skip
讀取指定數(shù)量的數(shù)據(jù)記錄limit
范例:
db.students.find().limit(2)
讀取2條記錄陵珍,默認是排在最前面的那2條被讀取。
讀取時跳過指定數(shù)量的數(shù)據(jù)記錄
skip
范例:
db.students.find().limit(2).skip(2)
當然违施,還可以添加 find 的查找條件的參數(shù)互纯,以便進行更精確的查找。
有了這個功能磕蒲,也就是說留潦,我們可以分頁查詢了只盹。
排序sort
mongodb的sort方法可以按照指定的字段進行升序或降序。
升序為1兔院,降序為-1
語法:
db.collectionName.find().sort({KEY:1|-1})
范例殖卑,查詢students按照年齡升序排列:
db.students.find().sort({age:1})
修改(update)
命令:
db.collectionName.update(selector, newValue, upserts, multipleUpdate)
參數(shù)詳解:
-
selector
:是個檢索選擇器,明確查詢條件的 -
newValue
:要更新的內容坊萝,包含兩種基本情況孵稽,即有沒有$set、$inc十偶、$push這些參數(shù):
情況一菩鲜、無參數(shù),則newValue替換掉原先selector的內容惦积;
情況二接校、有參數(shù),則$set是對指定field進行更新newValue狮崩;$inc要求指定field為數(shù)值蛛勉,加上newValue值;$push要求指定field為數(shù)組睦柴,為數(shù)組加入newValue項诽凌。 -
upserts
:是個邏輯值參數(shù),默認為false爱只,即根據(jù)selector查詢皿淋,查到了document,那就執(zhí)行更新恬试;沒查到就啥也不做窝趣。那設置為true,意思就很明顯了训柴,如果沒查到就Create一個新document存放selector和newValue哑舒。 -
multipleUpdate
:也是個邏輯值參數(shù),默認為false幻馁,即根據(jù)selector查詢洗鸵,查到了documents,那就執(zhí)行更新第一條document仗嗦;設置為true的話膘滨,就把所有查到的document都更新
案例,將tom的年齡修改為19歲:
db.students.update({name:"tom"},{$set:{age:19}})
刪除(remove)
命令:
db.collection.remove(<query>,<justOne>)
參數(shù)說明:
-
query
:(可選)刪除的文檔的條件稀拐。若該參數(shù)為空火邓,則刪除該集合的所有文檔。 -
justOne
:(可選)如果設為 true 或 1,則只刪除一個文檔铲咨。
若是刪除整個集合建議用
drop
方法躲胳。db.collectionName.drop()
案例,刪除姓名為bob的學生:
db.students.remove({name:"bob"})
完
本文為原創(chuàng)纤勒,轉載請注明出處