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