MongoDB基礎操作之增刪改

y ## 前言

對于數據庫的操作突委,無非就是增刪改查,只有掌握這些基礎的知識我們才能夠好好掌握MongoDB侣集,所以接下來就學習一下最基本的應用增刪改的操作了坛增,查詢的內容已經在上篇文章<a href="http://www.reibang.com/p/9a45413307b4">MongoDB查詢知多少</a>發(fā)布了。

插入語句

與其它的關系型數據庫一樣雕欺,增加記錄可以使用insert語句來完成涎劈,下面來查看一下例子。

db.users.insert({id:1,name:"peter",age:21,email:"veionestudio@outlook.com",phone:"183********"});

tips:
(1)第一次插入數據時阅茶,不需要預先創(chuàng)建一個集合(users)蛛枚,插入數據時它會自動創(chuàng)建這個集合。
(2)每次插入數據時如果沒有顯示指定的字段"_id"脸哀,則會默認創(chuàng)建一個主鍵"_id"蹦浦。在關系數據庫中主鍵大多數是數值類型,而且是自動增長類型的序列撞蜂。而MongoDB中的主鍵值類型則為ObjectId類型盲镶,這樣設計好處是可以更好地支持分布式存儲。其中ObjectId類型的值由12個字節(jié)組成蝌诡,前面4個字節(jié)表示的是一個時間戳溉贿,精確到秒,緊接著的3個字節(jié)表示的是機器唯一標示浦旱,接著2個字節(jié)表示的進程id宇色,最后3個字節(jié)是一個隨機的計數器。
(3)在MongoDB中颁湖,每一個集合都必須有一個"_id"字段宣蠕,不管是自動生成還是指定的,值都是必須唯一的甥捺,如果插入重復值將會拋出異常抢蚀。下面有個小栗子。

db.users.insert({"_id":1,name:"james",phone:"12345678905"});

如果插入同樣的值镰禾,將會拋出以下異常皿曲。

插入_id重復拋出異常

根據錯誤我們可以清楚的知道唱逢,duplicate key error collection,主鍵已經重復了。

修改語句

與關系型數據庫類型屋休,MongoDB修改語句由update完成惶我,只是MongoDB和普通的關系型數據庫有些不同而已〔┩叮總的來說修改分為兩種,一種是只針對具體的目標字段盯蝴,其它不變毅哗;另一種是取代性的更改,即修改具體目標字段后捧挺,其它的字段將會被刪除虑绵。其語法格式如下:
<pre>
db.cooolection.update(query,update,<upsert>,<multi>)
參數說明如下:
query參數是一個查詢選擇器,值類型為document闽烙。
update參數為需要修改的地方翅睛,值類型為document,如果update參數只包括字段選項黑竞,沒有操作符捕发,則會發(fā)生取代性的更改。
upsert為一個可選參數很魂,boolean類型扎酷,默認值為false。當值為true時遏匆,update將會匹配更改內容法挨,如果沒有更新到匹配的內容,則會插入一個新的文檔到集合中幅聘。
multi參數為一個可選的參數凡纳,boolean類型,當為true時帝蒿,update方法將更新素有匹配到的文檔荐糜。
</pre>

下面通過實例代碼來更新操作:
1、更改指定的的字段值

db.user.update({name:"peter"},{$set:{name:"James"},{$inc:{age:22}});

這個操作將會匹配到name:"peter"的第一個文檔葛超,將其中的字段name設為"James"狞尔,字段"age"增加22,其它字段保持不變巩掺。

2偏序、更改指定字段其它字段被清除掉

db.user.update({name:"peter"},{"name":"James"})

這個操作將更改集合中與name:"peter"匹配的第一個文檔,將其中的字段name設置為"James"后胖替,文檔中除了"_id"之外研儒,將全部被清除掉豫缨。

3、更改多個文檔中的指定字段

db.goods.update({name:"surface",,{$set:{price:6999}},{multi:true});

由于利用了可選參數multi,這個操作將更改集合中與name:"surface"匹配的所有文檔端朵,將其中的字段設為6999,其它字段不變好芭。

4、update找不到匹配的文檔時則插入新文檔

db.goods.update({name:"macbook pro"},{$set:{price:12600}},{upsert:true});

因為利用了可選參數upsert冲呢,這個操作如果匹配不到文檔舍败,則會進行插入的操作。

刪除語句

MongoDB中刪除操作remove也是數據庫CRUD操作中最基本的一種敬拓,與關系型數據庫中的delete類型邻薯,語法如下:
<pre>
db.collection.remove(<query>,<justOne>);
參數說明如下:
query參數為可選參數,查詢選擇器乘凸,類似關系型數據庫中的where條件語句厕诡。
justOne參數也是可選參數,是一個boolean值類型营勤,表示是否只輸出匹配的第一個文檔灵嫌,相當于關系型數據庫中的limit 1條件。
有一條需要注意的是:
如果remove沒有指定任何參數葛作,它將刪除集合中的所有文檔寿羞,但是不會刪除集合對應的索引數據。如果想刪除集合中的所有文檔赂蠢,同時也刪除集合的索引稠曼,我們可以使用MongoDB針對集合提供的drop方法。
</pre>
下面舉幾個栗子客年。

1霞幅、刪除匹配的所有文檔

db.goods.remove({name:"macbook pro"});

2、刪除匹配的第一個文檔

db.goods.remove({name:"nokia"});

3量瓜、刪除所有文檔司恳,但不會刪除索引

db.goods.remove();

鎖機制

MongoDB與關心性數據庫類似,也是通過鎖機制來保證數據的完整性和一致性的绍傲。MongoDB利用讀寫鎖來支持并發(fā)操作扔傅,讀鎖可以共享,寫鎖具有排它性烫饼。當一個讀鎖存在時猎塞,其它讀操作也可以用這個讀鎖;但是當一個寫鎖存在時杠纵,其它任何讀寫操作都不能共享這把鎖荠耽,當一個讀和寫都等待一個鎖時,MongoDB將優(yōu)先分配鎖給寫操作比藻。

總結

通過MongoDB的學習铝量,我們學會了基本的操作增刪改的操作倘屹,insert、update慢叨、remove操作纽匙,相對于關系型數據來說語法差不多。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末拍谐,一起剝皮案震驚了整個濱河市烛缔,隨后出現的幾起案子,更是在濱河造成了極大的恐慌轩拨,老刑警劉巖践瓷,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異气嫁,居然都是意外死亡,警方通過查閱死者的電腦和手機够坐,發(fā)現死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門寸宵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人元咙,你說我怎么就攤上這事梯影。” “怎么了庶香?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵甲棍,是天一觀的道長。 經常有香客問我赶掖,道長感猛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任奢赂,我火速辦了婚禮陪白,結果婚禮上,老公的妹妹穿的比我還像新娘膳灶。我一直安慰自己咱士,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布轧钓。 她就那樣靜靜地躺著序厉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毕箍。 梳的紋絲不亂的頭發(fā)上弛房,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音而柑,去河邊找鬼庭再。 笑死捞奕,一個胖子當著我的面吹牛,可吹牛的內容都是我干的拄轻。 我是一名探鬼主播颅围,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恨搓!你這毒婦竟也來了院促?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斧抱,失蹤者是張志新(化名)和其女友劉穎常拓,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體辉浦,經...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡弄抬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了宪郊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掂恕。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弛槐,靈堂內的尸體忽然破棺而出懊亡,到底是詐尸還是另有隱情,我是刑警寧澤乎串,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布店枣,位于F島的核電站,受9級特大地震影響叹誉,放射性物質發(fā)生泄漏鸯两。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一长豁、第九天 我趴在偏房一處隱蔽的房頂上張望甩卓。 院中可真熱鬧,春花似錦蕉斜、人聲如沸逾柿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽机错。三九已至,卻和暖如春父腕,著一層夾襖步出監(jiān)牢的瞬間弱匪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萧诫,地道東北人斥难。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像帘饶,于是被迫代替她去往敵國和親哑诊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容