MongoDB(五):更新文档、删除文档
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({}) # 删除所有 documentdb.mycol.deleteMany({ _id : "1" }) # 删除所有 匹配到documentdb.mycol.deleteOne( { _id: "3" } ) # 只删除第一个匹配的 document
remove()方法可以说是deleteOne()、deleteMany()的集合。remove()方法是有那个boolean值的justOne参数来分别是否只删除一个文档,也就是区分deleteOne()、deleteMany()。