MongoDB的增刪改查基本命令

本文為轉載,原文:MongoDB的增刪改查基本命令

創建庫

命令:

> use dbName

若數據庫存在,則該命令的效果是切換到當前數據庫;若該數據庫不存在,則該命令可以創建數據庫,并切換到該數據庫。

下面是創建mydb數據庫的截圖:

創建集合

命令:

> db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>} )

相關參數說明

name:集合的名字
capped:是否啟用集合限制,如果開啟需要制定一個限制條件,默認為不啟用,這個參數沒有實際意義
size:限制集合使用空間的大小,默認為沒有限制
max:集合中最大條數限制,默認為沒有限制
autoIndexId:是否使用_id作為索引,默認為使用(true或false)
size的優先級比max要高

常用方法介紹

  1. 一般來說,我們創建集合用db.createCollection(name),如:db.createCollection("log"),創建一個名字為log的集合,沒有任何的大小,數量限制,使用_id作為默認索引;
  2. 限制集合空間的大?。?code>db.createCollection("log",{size:1024})或db.createCollection("log",{capped:true,size:1024}),創建一個名字為log集合,限制它的空間大小為1M,如果超過1M的大小,則會刪除最早的記錄;
  3. 限制集合的最大條數:db.createCollection("log",{max:1024}),創建一個名字為log集合,最大條數為1024條,超過1024再插入數據的話會刪除最早的一條記錄。這個不能使用capped:true,否則會報錯;
  4. 即限制最大條數有限制使用空間大?。?code>db.createCollection("log",{size:1024,max:1024})或db.createCollection("log",{capped:true,size:1024,max:1024}),限制集合最大使用空間為1M,最大條數為1024條

下面是在mydb數據中創建students集合的截圖:

數據插入

命令:

db.collectionName.insert(value)

其中valueBson格式的數據。
接下來,我們便在我們的students集合中添加數據:

> db.students.insert({
    name:"tom",
    age:18,
    gender:"male",
    grade:"Freshman"
})

結果如下:



下面我們多插入幾條數據,便于后面的查詢:

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的全部數據:

db.students.find()


當然你也可以在命令的后面加一個pretty()方法,這樣查詢出來的結果會被格式化:

db.students.find().pretty()

結果:



(截圖沒截完全)
這樣的話,數據可讀性會高一點。

查詢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還有一種按照數據類型來查詢的操作符$type:
type的值如下:

  • 雙精度型-1
  • 字符串-2
  • 對象-3
  • 數組-4
  • 二進制數據-5
  • 對象ID-7
  • 布爾類型-8
  • 數據-9
  • 空-10
  • 正則表達式-11
  • JS代碼-13
  • 符號-14
  • 有作用域的JS代碼-15
  • 32位整型數-16
  • 時間戳-17
  • 64位整型數-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字段的數據:

db.getCollection("students").find({$where:function(){ return !!this.name; } })

limit 與 skip

讀取指定數量的數據記錄limit
范例:

db.students.find().limit(2)


讀取2條記錄,默認是排在最前面的那2條被讀取。
讀取時跳過指定數量的數據記錄skip
范例:

db.students.find().limit(2).skip(2)

當然,還可以添加 find 的查找條件的參數,以便進行更精確的查找。
有了這個功能,也就是說,我們可以分頁查詢了。

排序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)

參數詳解:

  • selector:是個檢索選擇器,明確查詢條件的
  • newValue:要更新的內容,包含兩種基本情況,即有沒有$set、$inc、$push這些參數:
    情況一、無參數,則newValue替換掉原先selector的內容;
    情況二、有參數,則$set是對指定field進行更新newValue;$inc要求指定field為數值,加上newValue值;$push要求指定field為數組,為數組加入newValue項。
  • upserts:是個邏輯值參數,默認為false,即根據selector查詢,查到了document,那就執行更新;沒查到就啥也不做。那設置為true,意思就很明顯了,如果沒查到就Create一個新document存放selector和newValue。
  • multipleUpdate:也是個邏輯值參數,默認為false,即根據selector查詢,查到了documents,那就執行更新第一條document;設置為true的話,就把所有查到的document都更新

案例,將tom的年齡修改為19歲:

db.students.update({name:"tom"},{$set:{age:19}})

刪除(remove)

命令:

db.collection.remove(<query>,<justOne>)

參數說明:

  • query:(可選)刪除的文檔的條件。若該參數為空,則刪除該集合的所有文檔。
  • justOne:(可選)如果設為 true 或 1,則只刪除一個文檔。

若是刪除整個集合建議用drop方法。db.collectionName.drop()

案例,刪除姓名為bob的學生:

db.students.remove({name:"bob"})

本文為原創,轉載請注明出處

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容