1. 更新文檔 MongoDB的uptade()和save()方法用於將集合中的文檔更新。update()方法更新現有文檔中的值,而save()方法是傳遞文檔數據替換現有文檔。從3.2版本開始,MongoDB提供以下更新集合文檔的方法: db.collection.updateOne()向指定集合更 ...
1. 更新文檔
MongoDB的uptade()和save()方法用於將集合中的文檔更新。update()方法更新現有文檔中的值,而save()方法是傳遞文檔數據替換現有文檔。從3.2版本開始,MongoDB提供以下更新集合文檔的方法:
db.collection.updateOne()向指定集合更新單個文檔
db.collection.updateMany()向指定集合更新多個文檔
1.1 update()方法
update()方法更新現有文檔中的值。
語法:
> db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)
實例:
mycol集合具有以下數據:
> 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”。
> 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。
>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()。