mongo更新數(shù)據(jù)update

使用update修改項時經(jīng)常會遇到下面坑夫壁,先準備些數(shù)據(jù)拾枣。

var workmate1={
    name:'zyb',
    age:23,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        SkillTwo:'JavaScript',
        SkillThree:'NODE'
    },
    regeditTime:new Date()
}
var workmate2={
    name:'zl',
    age:24,
    sex:1,
    job:'JAVA后端',
    skill:{
        skillOne:'HTML+CSS',
        SkillTwo:'J2EE',
        SkillThree:'MySQL'
    },
    regeditTime:new Date()
}
var workmate3={
    name:'cxw',
    age:20,
    sex:1,
    job:'UI設計',
    skill:{
        skillOne:'PhotoShop',
        SkillTwo:'UI',
        SkillThree:'Word+Excel+PPT'
    },
    regeditTime:new Date()
}
var db=connect('user')
var workmateArray=[workmate1,workmate2,workmate3]
db.workmate.insert(workmateArray)
print('The data was inserted successfully.');

上面的代碼,以文件的形式向數(shù)據(jù)庫中插入了3條數(shù)據(jù)盒让。
這時候突然發(fā)現(xiàn)UI職位的性別出現(xiàn)了錯誤梅肤,本來人家是個美女,這里錯寫成了男邑茄,我們需要修改這條數(shù)據(jù)姨蝴,如果有過關系型數(shù)據(jù)庫的經(jīng)驗的同學,經(jīng)常會這樣寫肺缕。

db.workmate.update({name:'cxw'},{sex:0})

這樣寫的問題是左医,我們的最后一條數(shù)據(jù)變成了只有sex:0,其它數(shù)據(jù)全部丟失了同木,這肯定不是我們想要的浮梢。

【正確的修改方法】
可以聲明一個變量,然后把要改變數(shù)據(jù)的全部信息放入變量彤路,最后執(zhí)行修改操作秕硝。

var db=connect('user')
var workmate3={
    name:'cxw',
    age:20,
    sex:0,
    job:'UI設計',
    skill:{
        skillOne:'PhotoShop',
        SkillTwo:'UI',
        SkillThree:'Word+Excel+PPT'
    },
    regeditTime:new Date()
}
db.workmate.update({name:'cxw'},workmate3)
print('The data was updated successfully');

上面的修改方法每次修改都需要把之前的數(shù)據(jù)帶上,很不優(yōu)雅簡潔洲尊。update提供了修改器远豺,幫助我們做這些事情。

【$set修改器】
用來修改一個指定的鍵值(key),這時候我們要修改上節(jié)課的sex和age就非常方便了坞嘀,只要一句話就可以搞定躯护。

db.workmate.update({"name":"cxw"},{"$set":{sex:0,age:22}})

修改好后,我們可以用db.workmate.find()來進行查看丽涩,你會發(fā)現(xiàn)數(shù)據(jù)已經(jīng)被修改棺滞。

修改嵌套內(nèi)容(內(nèi)嵌文檔)
比如現(xiàn)在的UI的技能發(fā)生了變化,說她不會作PPT而是word作的很好矢渊,需要進行修改检眯。這時候你會發(fā)現(xiàn)skill數(shù)據(jù)是內(nèi)嵌的,這時候我們可以屬性的形式進行修改昆淡,skill.skillThree锰瘸,具體看下面的代碼。

db.workmate.update({"name":"cxw"},{"$set":{"skill.SkillThree":'word'}})

這樣就可以簡單的修改內(nèi)嵌文檔了昂灵。

【$unset用于將key刪除】
它的作用其實就是刪除一個key值和鍵避凝。一般女孩子都是不希望看到自己的年齡的舞萄,所以要求我們把年齡刪除。

db.workmate.update({"name":"cxw"},{$unset:{"age":''}})

當你刪除后管削,想加回來可以直接用$set進行添加倒脓。

【$inc對數(shù)字進行計算】
這是對value值的修改,但是修改的必須是數(shù)字含思,字符串是不起效果的崎弃。我們現(xiàn)在要對zl的年齡減去2歲,就可以直接用$inc來操作含潘。

db.workmate.update({"name":"zl"},{$inc:{"age":-2}})

【multi選項】
現(xiàn)在領導說了饲做,你要把每個人的愛好也加入進來,但是如果你直接寫會只加一個遏弱,比如下面這種形式盆均。

db.workmate.update({},{$set:{interset:[]}})

這時候你用db.workmate.find()查找,你會發(fā)現(xiàn)只改變了第一個數(shù)據(jù)漱逸,其他兩條沒有改變泪姨。這時候我們想改變就要用到multi選項。

db.workmate.update({},{$set:{interset:[]}},{multi:true})

這時候每個數(shù)據(jù)都發(fā)生了改變饰抒,multi是有ture和false兩個值肮砾,true代表全部修改,false代表只修改一個(默認值)袋坑。

【upsert選項】
upsert是在找不到值的情況下仗处,直接插入這條數(shù)據(jù)。比如我們這時候又來了一個新同事xw咒彤,我們這時候修改他的信息疆柔,age設置成20歲咒精,但集合中并沒有這條數(shù)據(jù)镶柱。這時候可以使用upsert選項直接添加。

db.workmate.update({name:'xw'},{$set:{age:20}},{upsert:true})

upsert也有兩個值:true代表沒有就添加模叙,false代表沒有不添加(默認值)歇拆。

上面是一些基礎的修改器,接下來主要是數(shù)組修改器的操作范咨,當然也可以修改內(nèi)嵌文檔故觅,也就是對象形式的數(shù)據(jù)。

【$push追加數(shù)組/內(nèi)嵌文檔值】
$push的功能是追加數(shù)組中的值渠啊,但我們也經(jīng)常用它操作內(nèi)嵌文檔输吏,就是{}對象型的值。先看一個追加數(shù)組值的方式替蛉,比如我們要給小王加上一個愛好(interset)為畫畫(draw):

db.workmate.update({name:'xw'},{$push:{interest:'draw'}})

當然$push修飾符還可以為內(nèi)嵌文檔增加值贯溅,比如我們現(xiàn)在要給我們的UI拄氯,增加一項新的技能skillFour為draw,這時候我們可以操作為:

db.workmate.update({name:'cxw'},{$push:{"skill.skillFour":'draw'}})

$push修飾符在工作中是最常用的它浅,因為我們的數(shù)據(jù)一般都會涉及數(shù)組和內(nèi)嵌文檔的操作译柏。

【$ne查找是否存在】
它的作用是,檢查一個值是否存在姐霍,如果不存在再執(zhí)行操作鄙麦,存在就不執(zhí)行。
如果xiaoWang的愛好(interest)里沒有palyGame這個值镊折,我們就加入Game這個愛好胯府。

db.workmate.update({name:'xw',"interest":{$ne:'playGame'}},{$push:{interest:'Game'}})

【$addToSet 升級版的$ne】
它是$ne的升級版本(查找是否存在,不存在就push上去)腌乡,操作起來更直觀和方便盟劫,所以再工作中這個要比$en用的多。
我們現(xiàn)在要查看小王(xiaoWang)興趣(interest)中有沒有閱讀(readBook)這項与纽,沒有則加入讀書(readBook)的興趣.

db.workmate.update({name:"xiaoWang"},{$addToSet:{interest:"readBook"}})

【$each 批量追加】
它可以傳入一個數(shù)組侣签,一次增加多個值進去,相當于批量操作急迂,性能同樣比循環(huán)操作要好很多影所,這個是需要我們注意的,工作中也要先組合成數(shù)組僚碎,然后用批量的形式進行操作猴娩。
我們現(xiàn)在要給xw,一次加入三個愛好勺阐,唱歌(Sing)卷中,跳舞(Dance),編碼(Code)渊抽。

var newInterset=["Sing","Dance","Code"];
db.workmate.update({name:"xw"},{$addToSet:{interest:{$each:newInterset}}})

【$pop 刪除數(shù)組值】
$pop只刪除一次蟆豫,并不是刪除所有數(shù)組中的值。而且它有兩個選項懒闷,一個是1和-1十减。
1:從數(shù)組末端進行刪除
-1:從數(shù)組開端進行刪除
例子:現(xiàn)在要刪除xiaoWang的編碼愛好(code)。

db.workmate.update({name:'xw'},{$pop:{interest:1}})

【數(shù)組定位修改】
有時候只知道修改數(shù)組的第幾位愤估,但并不知道是什么帮辟,這時候我們可以使用interest.int 的形式。
例子玩焰,比如我們現(xiàn)在要修改xiaoWang的第三個興趣為編碼(Code)由驹,注意這里的計數(shù)是從0開始的。

db.workmate.update({name:'xw'},{$set:{"interest.2":"Code"}})
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昔园,一起剝皮案震驚了整個濱河市蔓榄,隨后出現(xiàn)的幾起案子闹炉,更是在濱河造成了極大的恐慌,老刑警劉巖润樱,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渣触,死亡現(xiàn)場離奇詭異,居然都是意外死亡壹若,警方通過查閱死者的電腦和手機嗅钻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來店展,“玉大人养篓,你說我怎么就攤上這事÷冈蹋” “怎么了柳弄?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長概说。 經(jīng)常有香客問我碧注,道長,這世上最難降的妖魔是什么糖赔? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任萍丐,我火速辦了婚禮,結果婚禮上放典,老公的妹妹穿的比我還像新娘逝变。我一直安慰自己,他們只是感情好奋构,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布壳影。 她就那樣靜靜地躺著,像睡著了一般弥臼。 火紅的嫁衣襯著肌膚如雪宴咧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天醋火,我揣著相機與錄音悠汽,去河邊找鬼箱吕。 笑死芥驳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的茬高。 我是一名探鬼主播兆旬,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怎栽!你這毒婦竟也來了丽猬?” 一聲冷哼從身側響起宿饱,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脚祟,沒想到半個月后谬以,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡由桌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年为黎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片行您。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡铭乾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娃循,到底是詐尸還是另有隱情炕檩,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布捌斧,位于F島的核電站笛质,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捞蚂。R本人自食惡果不足惜经瓷,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洞难。 院中可真熱鬧舆吮,春花似錦、人聲如沸队贱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柱嫌。三九已至锋恬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間编丘,已是汗流浹背与学。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘉抓,地道東北人索守。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像抑片,于是被迫代替她去往敵國和親卵佛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容