MongoDB(五):更新文檔、刪除文檔

1. 更新文檔

MongoDB的uptade()和save()方法用於將集合中的文檔更新。update()方法更新現有文檔中的值,而save()方法是傳遞文檔數據替換現有文檔。從3.2版本開始,MongoDB提供如下更新集合文檔的方法:yii

db.collection.updateOne()向指定集合更新單個文檔ide

db.collection.updateMany()向指定集合更新多個文檔函數

1.1 update()方法

update()方法更新現有文檔中的值。ui

語法:spa

> db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)

實例:code

mycol集合具備如下數據:blog

> db.mycol.find({}, {'_id':1, 'title':1})
{ "_id" : 100, "title" : "MongoDB Overview" }
{ "_id" : 101, "title" : "MongoDB Guide" }
{ "_id" : 102, "title" : "NoSQL Database" }
{ "_id" : 104, "title" : "Python Quick Guide" }
>

將標題爲「MongoDB Overview」的文檔設置爲「New Update MongoDB Overview」。ci

> db.mycol.find({'title':'MongoDB Overview'},{'_id':1, 'title':1})
{ "_id" : 100, "title" : "MongoDB Overview" }
> # 更新操做
> db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New Update MongoDB Overview'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> # 查詢更新後的結果 -
> db.mycol.find({'_id':100},{'_id':1, 'title':1})
{ "_id" : 100, "title" : "New Update MongoDB Overview" }
>

默認狀況下,MongoDB只會更新一個文檔。要更新多個文檔,須要將參數’multi‘設置爲true。rem

>db.mycol.update({'title':'MongoDB Overview'},
   {$set:{'title':'New Update MongoDB Overview'}},{multi:true})

1.2 Save()方法

save方法使用傳遞的文檔數據替換現有文檔。文檔

語法:

>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})

實例:

將_id爲100的文檔使用新的文檔替換。

db.mycol.save(
   {
      "_id" : 100, "title":"Update By Save()Method.", "by":"yiibai.com"
   }
)

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.mycol.find({'_id':100}, {'_id':1, 'title':1})
{ "_id" : 100, "title" : "Update By Save()Method." }

2. 刪除文檔

MongoDB提供了三個刪除文檔的方法:remove()、deleteOne()、deleteMany()。

2.1 remove()方法

remove()是最先的刪除方法,如今使用的人也很多。

在執行remove()函數前先執行find()命令來判斷執行的條件是否正確,這是一個比較好的習慣。

remove()方法接受兩個參數。的一個是刪除條件,第二個是標誌:justOne。

criteria:(可選)符合刪除條件的集合將被刪除。

justOne:(可選)若是設置爲true或1,則只刪除一個文檔。

語法:

>db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

mycol集合具備如下數據:

> db.mycol.find({}, {'_id':1, 'title':1})
{ "_id" : 101, "title" : "MongoDB Guide" }
{ "_id" : 102, "title" : "NoSQL Database" }
{ "_id" : 104, "title" : "Python Quick Guide" }
{ "_id" : 100, "title" : "Update By Save()Method." }
>

刪除_id爲「100」的文檔。

> db.mycol.find({}, {'_id':1, 'title':1})
{ "_id" : 101, "title" : "MongoDB Guide" }
{ "_id" : 102, "title" : "NoSQL Database" }
{ "_id" : 104, "title" : "Python Quick Guide" }
{ "_id" : 100, "title" : "Update By Save()Method." }
>
> db.mycol.remove({'_id':100})
WriteResult({ "nRemoved" : 1 })
> db.mycol.find({}, {'_id':1, 'title':1})
{ "_id" : 101, "title" : "MongoDB Guide" }
{ "_id" : 102, "title" : "NoSQL Database" }
{ "_id" : 104, "title" : "Python Quick Guide" }
>

若是有多條記錄,而且只想刪除第一條記錄,則在remove()方法中設置justOne參數。

>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

若是要刪除全部文檔記錄,能夠在remove()方法中設置justOne參數。

若是不指定刪除條件,MongoDB 將刪除集合中的全部文檔。 這至關於SQL的truncate命令。

>db.mycol.remove()
>db.mycol.find()
>

2.2 daleteOne()方法和deleteMany()方法

db.mycol.deleteMany({})  # 刪除全部 document
db.mycol.deleteMany({ _id : "1" })    # 刪除全部 匹配到document
db.mycol.deleteOne( { _id: "3" } )   # 只刪除第一個匹配的 document

remove()方法能夠說是deleteOne()、deleteMany()的集合。remove()方法是有那個boolean值的justOne參數來分別是否只刪除一個文檔,也就是區分deleteOne()、deleteMany()。

相關文章
相關標籤/搜索