莒縣網(wǎng)站設(shè)計(jì)免費(fèi)百度seo引流
個(gè)人博客
整理mongodb文檔:改
求關(guān)注,求批評(píng),求進(jìn)步
文章概敘
本文主要講的是mongodb的updateOne以及updateMany,主要還是在shell下進(jìn)行操作,也講解下主要的參數(shù)upsert以及更新的參數(shù)。
數(shù)據(jù)準(zhǔn)備
本次需要準(zhǔn)備的數(shù)據(jù)不是很多,就兩條就可以了
db.test.insertMany([{ string: 'a', number: 1 },{ string: 'A', number: 1 }
])
updateOne
Updates a single document within the collection based on the filter.
顧名思義,在過濾篩選的結(jié)果上更新單個(gè)文檔,示例代碼如下
db.test.updateOne({ string: 'a' },{ $set: { string: 'a1', number: 1 } },{ upsert: true }
)
這兒傳入了三個(gè)參數(shù),第一個(gè)是我們的filter,也就是過濾條件,而我們操作的數(shù)據(jù)就是根據(jù)這個(gè)過濾條件查詢出來的,如果返回的數(shù)據(jù)有多條,則只操作第一條。
第二個(gè)參數(shù)是更新操作,$set代表的是設(shè)置值,屬于更新運(yùn)算符的范疇,具體可以看下面鏈接,理解更多的操作符。
Update Operators — MongoDB Manual
第三個(gè)參數(shù)是配置項(xiàng),最經(jīng)常用到的是upsert以及collation,文章下面也會(huì)講到,這兒只是大概講解該api的結(jié)構(gòu)。
最終,更改后的結(jié)果如下,可以看到已經(jīng)將原來的a更改為了a1.
updateMany
Updates all documents that match the specified filter for a collection.
顧名思義,在過濾篩選的結(jié)果上更新所有的文檔,老規(guī)矩,先來一個(gè)例子作為講解。
db.test.updateMany({ number: 1 },{ $set: { string: 'a1', number: 1 } },{ upsert: true }
)
對(duì)于該API的參數(shù),也跟上面的updateOne差不多,只是更新的是查詢出來的全部數(shù)據(jù)。
update
需要注意的是,該api在5.0之后就不建議使用了,就廢棄了。
默認(rèn)情況下,update用于更新單個(gè)文檔,如果需要更新多個(gè)文檔,需要用到multi選項(xiàng)。
下面是一個(gè)簡(jiǎn)單的實(shí)例,只是讓大家看下這個(gè)語法怎么用而已,畢竟已經(jīng)是一個(gè)廢棄的API了。
db.test.update({ number: 1 },{ $set: { string: 'a1', number: 1 } },{ upsert: true ,multi:true}
)
介紹完了三個(gè)最主要的API的用法,接下來用updateMany作為例子,講下幾個(gè)主要的參數(shù)。
update
update是指我們要更新的操作,最簡(jiǎn)單的例子就是使用$set。update的操作有兩種類型,下面先介紹如何使用更新運(yùn)算符操作。
更新運(yùn)算符有三種類型,最常用的是數(shù)組以及字段的更新運(yùn)算符,下面會(huì)拿字段的更新運(yùn)算符做個(gè)例子,先抄錄?表格如下:
$set之前已經(jīng)試過了,現(xiàn)在試試$currentDate來給一個(gè)字段賦值當(dāng)前的時(shí)間。
db.test.updateMany({ number: 1 },{ $currentDate: { lastModified: true } },{ upsert: true, multi: true }
)
?其他的用法再看文檔的實(shí)例,用起來不會(huì)有什么難度。
upsert
Creates a new document if no documents match the . For more details see filterupsert behavior.
?文檔中對(duì)于upsert的解釋是:如果沒有找到文檔時(shí)候是否創(chuàng)建。下面用一個(gè)簡(jiǎn)單的例子來說明
db.test.updateMany({ number: 2 },{ $currentDate: { lastModified: true } },{ upsert: true, multi: true }
)
可以看到, 當(dāng)我們運(yùn)行語句的時(shí)候,upsert為true,則表示沒有找到number為2的數(shù)據(jù)的情況下,mongodb幫我們創(chuàng)建了一條數(shù)據(jù)。相同,如果?upsert為false,則不會(huì)創(chuàng)建。
collation
之前有專門的博客講解過這個(gè)參數(shù),就不專門再說了,collation影響的是查數(shù)據(jù)出來的順序
整理mongodb文檔:collation
聚合管道
聚合管道可以理解為一堆數(shù)據(jù),先通過a操作,然后再通過b操作,最后將數(shù)據(jù)整合成為自己想要的模型,在更新操作中,聚合管道有下面幾個(gè)階段。?
$addFields
$set
$project
$unset
$replaceRoot
$replaceWith
這兒我會(huì)通過一個(gè)簡(jiǎn)單的例子讓大家了解下如何使用聚合管道,而關(guān)于具體的聚合管道,后續(xù)會(huì)寫個(gè)博客介紹,本文章最主要是讓大家對(duì)這幾個(gè)api有了解,不會(huì)很一臉茫然。?
舉個(gè)例子,下面的代碼會(huì)將我們之前的number等于2的數(shù)據(jù)刪除掉lastModified字段,增加string字段
db.test.updateMany({ number: 2 },[{ "$project": { "lastModified": 0 } },{ "$set": { string: 'a2' } }],{ upsert: true }
)
最后的點(diǎn)
至此,關(guān)于update的幾個(gè)主要的點(diǎn),講解完畢,對(duì)于新手我不建議現(xiàn)在去看聚合管道,所以沒?馬上講,我的建議是先看完增刪改查。
最后,你覺得上單銳雯怎么玩呢??來個(gè)大佬。。。。