最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MongoDB數(shù)據(jù)更新方法干貨篇

 更新時(shí)間:2017年05月02日 09:34:38   作者:Chenjiabing  
之前給大家分享了MongoDB中數(shù)據(jù)查詢的相關(guān)方法和技巧,那么下面這篇文章主要給大家介紹了MongoDB中數(shù)據(jù)更新方法的相關(guān)資料,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

前言

數(shù)據(jù)更新是我們?nèi)粘2僮鲾?shù)據(jù)庫(kù)必不可少的一部分,下面這篇文章就給大家分享了操作MongoDB數(shù)據(jù)更新的一些干貨,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。

常用的函數(shù)

  • update(<query>,<update>,<upsert>,<multi>) ,其中<query>表示篩選的條件,<update>是要更新的數(shù)據(jù)
  • updateMany() 更新所有匹配到的數(shù)據(jù)

upsert

upsert是一個(gè)布爾類(lèi)型的數(shù)據(jù),如果為true時(shí),當(dāng)根據(jù)query條件沒(méi)有找到匹配的數(shù)據(jù)時(shí),就表示插入此條數(shù)據(jù),如果為false就表示不插入數(shù)據(jù)

下面將會(huì)在一個(gè)空的集合中更新數(shù)據(jù)

//就會(huì)插入此條數(shù)據(jù),因?yàn)闆](méi)有找到匹配的信息
db.user.update({'name':'chenjiabing','age':22,'sex':"Man"},{$set:{'hobby':'read'}},{'upsert':true}); 
db.user.update({'name':'chenjiabing','age':22,'sex':"Man"},{$set:{'hobby':'read'}},true); //和上面的語(yǔ)句等價(jià)
//輸出 db.user.find()
{ "_id" : ObjectId("59067b70856d5893a687655f"), "age" : 22, "name" : "chenjiabing", "sex" : "Man", "hobby" : "read" }

multi

如果這個(gè)參數(shù)為true,就把按條件查出來(lái)多條記錄全部更新。默認(rèn)為false,如果為true的話和updateMany()一樣的效果

下面將會(huì)更新所有匹配到的數(shù)據(jù)

db.user.update({name:'chenjiabing'},{$set:{'hobby':'code'}},{'multi':true});

字段更新操作符 Field Update Operators

$set

$set用來(lái)指定一個(gè)鍵的值。如果這個(gè)鍵不存在,則創(chuàng)建它。注意這里的更新默認(rèn)是只更新第一條匹配到的數(shù)據(jù),如果第一條匹配的數(shù)據(jù)已經(jīng)滿足修改后的條件,那么將不會(huì)執(zhí)行下面匹配的信息

下面我們將會(huì)添加一條信息在數(shù)據(jù)庫(kù)中

db.user.insert({"name":'jack',"age":22,"sex":'Man','school':{'name':'jsnu','city':'xuzhou'}});

運(yùn)行下面的代碼,將該用戶的興趣設(shè)置為“讀書(shū)”并添加至文檔中(此時(shí)文檔中hobby鍵是不存在,該條文檔就會(huì)創(chuàng)建它)

db.user.update({name:'jack'},{$set:{'hobby':'read'}})

下面將會(huì)修改用戶的年齡

db.user.update({'name':'jack'},{$set:{'age':20}})

下面用$set修改數(shù)據(jù)類(lèi)型,將sex設(shè)置為1

db.user.update({'name':'jack'},{$set:{'sex':1}})

下面用$set修改內(nèi)嵌文檔,必須指定文檔的名字和鍵值

db.user.update({name:'jack'},{$set:{'school.name':'shida','school.city':'beijing'}})

$unset

從文檔中移除指定的鍵

下面將要?jiǎng)h除上面插入的hobby鍵

db.user.update({name:'jack'},{$unset:{'hobby':1}}) //這里的值是任意給的,隨便什么值

$inc

$inc修改器用來(lái)增加已有鍵的值,或者在鍵不存在時(shí)創(chuàng)建一個(gè)鍵$inc就是專(zhuān)門(mén)來(lái)增加(和減少)數(shù)字的。$inc只能用于整數(shù)、長(zhǎng)整數(shù)或雙精度浮點(diǎn)數(shù)。要是用在其他類(lèi)型的數(shù)據(jù)上就會(huì)導(dǎo)致操作失敗

例如毎次有人訪問(wèn)該博文,該條博文的瀏覽數(shù)就加1,用鍵pageViews保存瀏覽數(shù)信息。這個(gè)鍵值上面沒(méi)有定義過(guò),所以會(huì)自動(dòng)創(chuàng)建一個(gè)

db.user.update({name:'jack'},{$inc:{'pageViews':1}}); //起初沒(méi)有就會(huì)自動(dòng)創(chuàng)建一個(gè)鍵

下面演示增加和減少

db.user.update({name:'jack'},{$inc:{'pageViews':100}}) ; //這里是在上面的基礎(chǔ)上加上100,此時(shí)變成了101
db.user.update({name:'jack'},{$inc:{"pageViews":-100}}) ; //這里是在上面的基礎(chǔ)上減去100,此時(shí)還是變成了1

$rename

語(yǔ)法: {$rename: { <old name1>: <new name1>, <old name2>: <new name2>, ... } }

$rename操作符可以重命名字段名稱(chēng),新的字段名稱(chēng)不能和文檔中現(xiàn)有的字段名相同。

下面重新插入一條數(shù)據(jù),并且改變這條數(shù)據(jù)的鍵的名稱(chēng)

db.user.insert({name:'chenjiabing','age':22,'sex':'Man','school':{'name':'jsnu','city':'beijing'}});
db.user.update({name:'chenjiabing'},{$rename:{'age':'Age'}}) //重命名age為Age

下面將要演示怎樣改變內(nèi)嵌文檔的鍵的名稱(chēng),注意一定要帶上文檔的名字

db.user.update({name:'chenjiabing'},{$rename:{'school.name':'school.Name','school.city':'school.City'}});

如果重命名的字段字和集合中原有的字段名字相同的話就會(huì)覆蓋原有的字段名稱(chēng),那么就會(huì)造成數(shù)據(jù)的丟失

db.user.update({name:'chenjiabing'},{'$rename':{'sex','age'}}); //這里sex變成age和原來(lái)的age相同,那么原來(lái)的age就會(huì)丟失
db.user.find({name:'chenjiabing'}); 
//輸出,可以看到原來(lái)的age沒(méi)有了,變成了覆蓋之后的
{ "_id" : ObjectId("590674ce30b9f88dd43d7ee4"), "name" : "chenjiabing", "age" : "Man", "school" : { "name" : "jsnu", "city" : "beijing" } }

如果指定的字段不存在,那么將不會(huì)更新,對(duì)原來(lái)的字段沒(méi)有影響

db.user.update({name:'chenjiabing'},{$rename:{value:'name'}}); //將不會(huì)有任何的改變,因?yàn)関alue這個(gè)字段根本不存在

$rename操作符也可以將子文檔中鍵值移到其他子文檔中

db.user.update({name:'chenjiabing'},{$rename:{'school.name':'contact.name'}});// 這里將會(huì)將school.name這個(gè)字段的值移到contact.name之中,如果contact不存在,那么就會(huì)創(chuàng)建一個(gè)
//輸出
{ "_id" : ObjectId("590674ce30b9f88dd43d7ee4"), "name" : "chenjiabing", "age" : "Man", "school" : { "city" : "beijing" }, "contact" : { "name" : "jsnu" } }

數(shù)組更新操作符 Array Update Operators

只能用在鍵值為數(shù)組的鍵上的數(shù)組操作。
$ (query)

語(yǔ)法: { "<array>.$" : value }

當(dāng)對(duì)數(shù)組字段進(jìn)行更新時(shí),且沒(méi)有明確指定的元素在數(shù)組中的位置,我們使用定位操作符$標(biāo)識(shí)一個(gè)元素,數(shù)字都是以0開(kāi)始的。

注意:

  • 定位操作符(“$”)作為第一個(gè)匹配查詢條件的元素的占位符,也就是在數(shù)組中的索引值。
  • 數(shù)組字段必須出現(xiàn)查詢文檔中。

向集合中插入兩條數(shù)據(jù)

db.students.insert({ "_id" : 1, "grades" : [ 78, 88, 88 ] });
db.students.insert({ "_id" : 2, "grades" : [ 88, 90, 92 ] });

執(zhí)行下列操作

//查詢匹配的文檔中,數(shù)組有2個(gè)88,只更新第一個(gè)匹配的元素,也就是"grades.1"
db.students.update( { _id: 1, grades: 88 }, { $set: { "grades.$" : 82 } }) ;
//查詢文檔中沒(méi)有出現(xiàn)grades字段,查詢報(bào)錯(cuò)
db.students.update( { _id: 2 }, { $set: { "grades.$" : 82 } } );

$push

如果指定的鍵已經(jīng)存在,會(huì)向已有的數(shù)組末尾加入一個(gè)元素,要是沒(méi)有就會(huì)創(chuàng)建一個(gè)新的數(shù)組。

下面我們將使用$push對(duì)該文檔添加一條評(píng)論信息。

//將會(huì)創(chuàng)建一個(gè)comments數(shù)組,因?yàn)橐婚_(kāi)始這個(gè)數(shù)組沒(méi)有存在
db.user.update({name:'chenjiabing'},{$push:{comments:{'name':'jack','content':'hello thanks'}}})
//繼續(xù)添加一條,在comments的末尾進(jìn)行添加,此時(shí)comments變成兩條數(shù)據(jù)了
db.user.update({name:'chenjiabing'},{$push:{comments:{'name':'john','content':'hello'}}})

$pull

語(yǔ)法:db.collection.update( { field: <query> }, { $pull: { field: <query> } } );

$pull操作符移除指定字段值為數(shù)組,且匹配$pull操作符移除指定字段值為數(shù)組,且匹配$pull語(yǔ)句聲明的查詢條件的所有元素。

執(zhí)行如下操作

//插入一條文檔
db.profiles.insert({ votes: [ 3, 5, 6, 7, 7, 8 ] });
//移除數(shù)組中所有元素7
db.profiles.update( { votes: 3 }, { $pull: { votes: 7 } } );
//移除數(shù)組中所有大于6的元素
db.profiles.update( { votes: 3 }, { $pull: { votes: { $gt: 6 } } } );
//Result
{ votes: [ 3, 5, 6, 8 ] }
{ votes: [ 3, 5, 6 ] }

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 高效mongodb的php分頁(yè)類(lèi)(不使用skip)

    高效mongodb的php分頁(yè)類(lèi)(不使用skip)

    這篇文章主要介紹了高效mongodb的php分頁(yè)類(lèi),并且沒(méi)有使用mongodb的skip來(lái)實(shí)現(xiàn)分頁(yè),需要的朋友可以參考下
    2014-05-05
  • Mongodb 刪除添加分片與非分片表維護(hù)

    Mongodb 刪除添加分片與非分片表維護(hù)

    MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。通過(guò)本文給大家介紹Mongodb 刪除添加分片與非分片表維護(hù)的相關(guān)知識(shí),對(duì)此文感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • MongoDB中的定時(shí)索引示例詳解

    MongoDB中的定時(shí)索引示例詳解

    這篇文章主要給大家介紹了關(guān)于MongoDB中定時(shí)索引的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 一次線上mongo慢查詢問(wèn)題排查處理記錄

    一次線上mongo慢查詢問(wèn)題排查處理記錄

    這篇文章主要給大家介紹了一次線上mongo慢查詢問(wèn)題排查處理的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • MongoDB在Windows平臺(tái)的安裝及配置方法

    MongoDB在Windows平臺(tái)的安裝及配置方法

    這篇文章主要介紹了MongoDB在Windows平臺(tái)的安裝及配置方法,簡(jiǎn)單分析了MongoDB的下載、設(shè)置方法、操作命令等具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • Mongodb億級(jí)數(shù)據(jù)性能測(cè)試和壓測(cè)

    Mongodb億級(jí)數(shù)據(jù)性能測(cè)試和壓測(cè)

    MongoDB是一個(gè)開(kāi)源的、基于分布式文件存儲(chǔ)的NoSQL數(shù)據(jù)庫(kù)系統(tǒng),它使用文檔存儲(chǔ)方式,數(shù)據(jù)結(jié)構(gòu)由鍵值(key-value)對(duì)組成,本文給大家介紹了Mongodb億級(jí)數(shù)據(jù)性能測(cè)試和壓測(cè),需要的朋友可以參考下
    2024-06-06
  • MongoDB社區(qū)版和企業(yè)版的差別對(duì)照表

    MongoDB社區(qū)版和企業(yè)版的差別對(duì)照表

    這篇文章主要介紹了MongoDB社區(qū)版和企業(yè)版的差別對(duì)照表,本文同時(shí)提供了中文和英文版的對(duì)照表,需要的朋友可以參考下
    2014-10-10
  • mongos崩潰后無(wú)法重啟問(wèn)題的解決方法

    mongos崩潰后無(wú)法重啟問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于mongos崩潰后無(wú)法重啟問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 如何為MongoDB添加分片副本集

    如何為MongoDB添加分片副本集

    這篇文章主要介紹了如何為MongoDB添加分片副本集,幫助大家更好的理解和學(xué)習(xí)使用MongoDB數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-03-03
  • MongoDB CRUD操作中的插入實(shí)例教程

    MongoDB CRUD操作中的插入實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于MongoDB CRUD操作中的插入的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

伊春市| 成武县| 家居| 澄迈县| 织金县| 平果县| 宜章县| 兴安县| 安福县| 兴安盟| 榆林市| 淮滨县| 仙游县| 阿拉善左旗| 罗源县| 长白| 灵川县| 偏关县| 华亭县| 十堰市| 阿克苏市| 会理县| 天长市| 五家渠市| 丹棱县| 阿鲁科尔沁旗| 桐乡市| 桃园县| 上饶县| 星座| 广饶县| 武强县| 枣庄市| 绵竹市| 高尔夫| 扎兰屯市| 武隆县| 武清区| 海安县| 丰台区| 青冈县|