欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MongoDB(五):更新文档、删除文档

程序员文章站 2023-03-26 18:49:23
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()。