更新文檔(update)-創(chuàng)新互聯(lián)

更新文檔(update)

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供海晏網(wǎng)站建設(shè)、海晏做網(wǎng)站、海晏網(wǎng)站設(shè)計(jì)、海晏網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、海晏企業(yè)網(wǎng)站模板建站服務(wù),十多年海晏做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

修改一條簡(jiǎn)單文檔:

db.getCollection("test").insert(
????{
????????title:?"商品購物單1",
????????amount:?35,
????????detail:?[
????????????{name:?"蘋果",?price:?22},
????????????{name:?"面粉",?price:?18}
????????]
????}
);
//修改符合條件的一條(插入的,符合條件的最早一條)
db.getCollection("test").update(
????{
????????title:?"商品購物單1"
????},
????{
????????$set:?{title:?"商品購物單2"}
????}
);

(update,修改符合條件的一條(插入的,符合條件的最早一條))

更新字段(增加,減少):

db.getCollection("test").update(
????{
????????title:?"商品購物單1"
????},
????{
????????$inc:?{"amount":?5}
????}
);

(update,修改符合條件的一條(插入的,符合條件的最早一條)。$inc操作符后面的值,可以是正數(shù)、負(fù)數(shù),也可以是小數(shù))

改為指定倍數(shù):

db.getCollection("test").update(
????{
????????title:?"商品購物單1"
????},
????{
????????$mul:?{"amount":?2}
????}
);

(update,修改符合條件的一條(插入的,符合條件的最早一條)。$mul操作符后面的值,可以是正數(shù)、負(fù)數(shù),也可以是小數(shù))

更新字段/鍵名

db.getCollection("test").insert(
????{
????????_id:?66,
????????titlss:?35,
????????amount:?50.5,
????????detail:?[
????????????{name:?"蘋果",?price:?22},
????????????{name:?"面粉",?price:?18}
????????]
????}
);
db.getCollection("test").update(
????{
????????_id:?66
????},
????{
????????$rename:?{"titlss":?"title"}
????}
);

($rename 操作符。在鍵名大量出錯(cuò)的情況下尤其有用)

將_id為66,title為35的這一列去掉(其他數(shù)據(jù)條的title不變)

db.getCollection("test").update(
????{
????????_id:?66
????},
????{
????????$unset:?{"title":?"35"}
????}
);

更新文檔(update)(其他數(shù)據(jù)條的title不變,title為35的變?yōu)镹/A)

_id:66文檔的amount由50.5修改為50:

db.getCollection("test").update(
????{
????????_id:?66
????},
????{
????????$unset:?{"title":?"35"}
????}
);

(將$min給出的值與當(dāng)前文檔字段值進(jìn)行比較,當(dāng)給定值較小時(shí)則修改當(dāng)前文檔值為給定值)

_id:66文檔的amount由50修改為50.5:

db.getCollection("test").update(
????{
????????_id:?66
????},
????{
????????$max:?{"amount":?50.5}
????}
);

(將$max 給出的值與當(dāng)前文檔字段值進(jìn)行比較,當(dāng)給定值較大時(shí)則修改當(dāng)前文檔值為給定值)

ISODate時(shí)間方法:

db.getCollection("test").insert(
????{
????????_id:?69,
????????title:?"商品購物單6",
????????amount:?80,
????????unit:?"元",
????????detail:?[
????????????{name:?"蘋果",?price:?22},
????????????{name:?"面粉",?price:?18}
????????],
????????lasttime:?ISODate("2018-07-21?14:53:56")
????}
);

修改一條文檔里的數(shù)組和嵌套文檔:

db.getCollection("test").insert(
????{
????????_id:?80,
????????title:?"商品購物單80",
????????amount:?80,
????????unit:?"元",
????????detail:?[
????????????{name:?"蘋果",?price:?22},
????????????{name:?"面粉",?price:?18}
????????],
????????lasttime:?ISODate("2018-07-21?14:53:56"),
????????overview:?{shop:?"丁丁電子商務(wù)平臺(tái)",?shopno:?5,?address:"地球村"}
????}
);
db.getCollection("test").update(
????{
????????_id:?80
????},
????{
????????$set:?{
????????????"detail.1":?{name:?"大米",?price:?16},
????????????"overview.address":?"某海"
????????}
????}
);

更新文檔(update)

(MongoDB數(shù)組下標(biāo)從0開始,"detail.1"代表數(shù)組第2個(gè)元素)

(引用數(shù)組或嵌入文檔對(duì)象時(shí),都需要加""號(hào),如"detail.1","overview.address",中間用點(diǎn)號(hào)隔離)

修改數(shù)組的內(nèi)容,要有

默認(rèn)情況下update命令都執(zhí)行修改一條文檔動(dòng)作,我們也希望能同時(shí)修改所有符合條件的文檔記錄,這里需要采用multi選項(xiàng):

db.getCollection("test").update(
????{
????????"detail.name":?"面粉",
????????"detail.price":?{$lte:?30}
????},
????{
????????$set:?{
????????????"detail.1":?{name:?"面粉",?price:?666},
????????????"overview.address":?"這里"
????????}
????},
????{
????????multi:?true
????}
);

(將面粉價(jià)格小于等于30的記錄的detail數(shù)組第二個(gè)(下標(biāo)為1)的面粉價(jià)格改為40)

find()查詢條件操作符,可以用在update操作條件上

db.getCollection("test").update(
????{
????????"detail.name":"面粉",?"detail.price":?{$lte:?30}
????},
????{
????????$set:?{
????????????"detail.1":?{name:"面粉",?price:40}
????????}
????},
????{
????????multi:?true?//滿足條件的都修改
????}
);

Update命令在特定情況下,可以增加文檔的宇段,甚至實(shí)現(xiàn)insert命令功能。這個(gè)特定條件是要修改的文檔沒有要修改的字段,而且update命令帶upsert選項(xiàng)

db.getCollection("test").update(
????{
????????_id:?80
????},
????{
????????$set:?{
????????????"detail.1":?{name:"面粉",?price:10},?//修改后的
????????????danwei:?"美元"?//新增加字段
????????}
????},
????{
????????upsert:?true
????}
);

writeConcern選項(xiàng)為update修改數(shù)據(jù)異常時(shí),提供出錯(cuò)處理機(jī)制

db.getCollection("test").update(
????{
????????item:?""
????},
????{
????????$set:?{
????????????title:?"測(cè)試",?price:?50
????????}
????},
????{
????????multi:?true,
????????writeconcern:?{w:?"majority",?wtimeout:3000}
????}
);

(當(dāng)update命令在5秒內(nèi)沒有執(zhí)行完成時(shí),取消該命令操作,并返回錯(cuò)誤值)

db.collection.updateOne()。與update()唯一的區(qū)別是命令語法里少了一個(gè)multi :<boolean>選項(xiàng), 也就是updateOne()只適用于符合條件的一條文檔的修改任務(wù)。

db.collection.updateMany()。與update()唯一的區(qū)別是命令語法里少了一個(gè)multi:<boolean>選項(xiàng), 也就是updateMany()只適用于符合條件的多條文檔的修改任務(wù)。

db.collection.replaceOne()。與update()的區(qū)別有兩處,一個(gè)沒有multi:<boolean>選項(xiàng);另外一個(gè)在第二個(gè)參數(shù)Cupdate的<update>)里不能有更新操作符。

更新文檔(update)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:更新文檔(update)-創(chuàng)新互聯(lián)
瀏覽路徑:http://muchs.cn/article42/dsphec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、App開發(fā)網(wǎng)站制作、面包屑導(dǎo)航企業(yè)建站、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)