mongodb update

update(filter,update,options)
  • 參數filter用于指定一個查詢,查詢選擇將要更新的目標記錄。
  • 參數update用于指定更新信息,也可以使用操作符來完成。
  • 參數options用于指定更新文檔時的選項,可選值包括:upsert和multi。upsert可以指定如果數據存在就更新,不存在就創建數據;multi選項指定是否應該更新所有匹配的文檔,或者只更新第一個文檔(默認行為)。

更新操作符

  • 覆蓋更新 任何忽略的字段都被移除(文檔被覆蓋)
update : {} 不適用操作符
  • 不存在時新增
options : {upsert:true}
  • $inc 增加新值
update : {$inc:{<field1>: <value1>,...}
  • $set 設置字段值
update : {$set:{<field1>: <value1>,...}
  • $unset 刪除指定字段值
update : {$unset:{<field1>: <value1>,...}
  • $rename 修改字段名
update : {$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
  • $min,$max 數值比較 true更新,false不更新
update : { $min: { <field1>: <value1>, ... } }
update : { $max: { <field1>: <value1>, ... } }
  • $setOnInsert 在{upsert:true}并且觸發新增操作時,作為默認值新增
  • $currentDate 當前日期 可設置類型$type date或者timestamp
update : { $currentDate: { <field1>:  {$type: <type>}, ... } }

數組操作符

  • $push 在指定字段中添加某個值

通過$push操作符可以在指定字段中添加某個值。

  1. 如果該字段是個數組,那么該值將被添加到數組中。
  2. 如果該字段尚不存在,那么該字段的值將被設置為數組。
  3. 如果該字段存在,但不是數組,那么將會拋出異常。
  4. 如果給定的值是個數組,那么該數組被看做是一個元素,添加給定字段中(If the value is an array, $push appends the whole array as a single element)。
  5. 使用$each 添加多個值到指定字段
  6. 使用$sort 排序
update : { $push: { <field1>: <value1>, ... } }
  • $push $each 在指定字段插入多個值
update : { $push: { <field>: { $each: [ <value1>, <value2> ... ] } } }

在使用$each是還可以使用$slice修改操作符,通過這種方式可以限制$push操作符中數組內元素的數量。 $slice可以是正數,負數或0。

  1. 正數將保證數組中的前n個元素會被保留
  2. 使用負數將保證數組中的最后n個元素會被保留
  3. 而使用0則表示清空數組

注意:操作符$slice必須是$push操作中的第一個修改操作符。
操作符$each和$slice操作符保證不僅新值會被添加到數組中,還能保證吧數組的大小限制為指定值。

update : { $push: { <field>: { $each: [ <value1>, ... ],$slice:<number> } } }
  • $sort 排序

$sort修改操作符必須與$each修改操作符一起使用。你可以傳遞一個空數組給$each操作符,這樣就可以只使$sort操作符起作用,達到不添加元素,只對原數組排序的目的。

在對數組元素進行排序時,1表示升序,-1表示降序。如果數組元素是文檔,我們可以根據整個文檔或者是文檔中某個具體字段來進行排序。在以前版本中(2.6版本之前)$sort只能根據文檔中的具體字段進行排序。假設數組元素是文檔,如果只是根據文檔中某個字段進行排序,需要使用字段和方向來進行排序,例如, { field: 1 } or { field: -1 },不要使用{ "arrayField.field": 1 }這種方式進行排序。

數組元素不是文檔,value1 = <string|number|boolean>
{
  $push: {
     <field>: {
       $each: [ <value1>, <value2>, ... ],
       $sort: <1 or -1>
     }
  }
}
數組元素是文檔,value1 = {field:<value>}
{
  $push: {
     <field>: {
       $each: [ <value1>, <value2>, ... ],
       $sort:  { field: <1 or -1> }
     }
  }
}
  • $addToSet 向數組中添加數據

操作符$addToSet 是另一個可用于向數組中添加數據的命令。不過,只有數據不存在的時候,該操作符才能將數據添加到數組中(The $addToSet operator adds a value to an array unless the value is already present, in which case$addToSet does nothing to that array)。它的 工作方式與$push不同,$addToSet確保在添加元素時不會與數組中元素重復($addToSet only ensures that there are no duplicate items added to the set and does not affect existing duplicate elements),但是$push可以添加重復元素。在使用$addToSet時,可以使用$each操作符指定的額外的參數。

如果添加的給定值是個數組,則會把整個數組看做一個元素添加到給定字段中。

update : { $addToSet: { <field1>: <value1>, ... } }
  • $pop 從數組中刪除單個元素

操作符$pop可以從數組中刪除單個元素。該操作符允許刪除數組中的第一個元素或者最后一個元素,具體取決于傳入的參數。如果傳遞的參數為-1表示刪除數組第一個元素,1表示刪除數組最后一個元素。如果刪除的指定字段field不是數組,則會報錯。

update: { $pop: { <field>: <-1 | 1>, ... } }
  • $pull 刪除所有指定值

通過使用$pull操作符可以從數組中刪除所有指定的值或者符合給定條件的值。如果數組中有多個元素的值相同,那么該操作符是非常有用的。

update : { $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
  • $pullAll刪除數組中多個元素

我們還可以從數組中刪除多個含有不同值的元素。該操作符將接收一個希望移除元素的數組。不同于$pull,$pull從數組中刪除匹配查詢條件的數組元素。

update : { $pullAll: { <field1>: [ <value1>, <value2> ... ], ... } }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容