视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mongodb高级操作(1)-update
2020-11-09 16:30:55 责编:小采
文档


前面我们已经介绍了mongodb的基本操作:mongodb基本操作下面是介绍一些高级的增删改查操作. 1.更新文档 文档替换 最简单的方法就是文档完全替换,如下就是一个完全替换的例子,先把需要更新的文档找出来并且赋,然后修改所赋的,最后再进行update: a1 = db . test

前面我们已经介绍了mongodb的基本操作:mongodb基本操作 下面是介绍一些高级的增删改查操作.

1.更新文档

文档替换

最简单的方法就是文档完全替换,如下就是一个完全替换的例子,先把需要更新的文档找出来并且赋值,然后修改所赋的值,最后再进行update:
> a1=db.test.findOne(){ "_id" : ObjectId("5738785d132e1e47e535a177"), "x" : 3.14, "y" : 5.5 }> a1{ "_id" : ObjectId("5738785d132e1e47e535a177"), "x" : 3.14, "y" : 5.5 }> delete a1.xtrue> a1{ "_id" : ObjectId("5738785d132e1e47e535a177"), "y" : 5.5 }> a1.content={name:'job',age:11}{ "name" : "job", "age" : 11 }> a1{	"_id" : ObjectId("5738785d132e1e47e535a177"),	"y" : 5.5,	"content" : {	"name" : "job",	"age" : 11	}}> db.test.update({"_id" : ObjectId("5738785d132e1e47e535a177")},a1)WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

使用修改器

通常文档只会有一部分需要更新,可以使用原子性的更新修改器对指定文档中的某些键进行更新

"$set"修改器

"$set"修改器用来指定一个字段的值,如果这个字段不存在则创建它,例如先给test表添加一个phone属性:
> db.test.find(){ "_id" : ObjectId("573957c55f74882a9bfa2d9e"), "name" : "brent", "age" : 30, "email" : "xxxx@qq.com" }> > db.test.update({"_id" : ObjectId("573957c55f74882a9bfa2d9e")},{"$set":{phone:666}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })>> db.test.find(){ "_id" : ObjectId("573957c55f74882a9bfa2d9e"), "name" : "brent", "age" : 30, "email" : "xxxx@qq.com", "phone" : 666 }
然后用修改器再将phone该为888
> db.test.update({"_id" : ObjectId("573957c55f74882a9bfa2d9e")},{"$set":{phone:888}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.test.find(){ "_id" : ObjectId("573957c55f74882a9bfa2d9e"), "name" : "brent", "age" : 30, "email" : "xxxx@qq.com", "phone" : 888 }
使用"$set"修改器还可以修改字段的属性,例如可以把phone改成一个数组,还可以用"$unset"将键完全删除:
 > db.test.update({"_id" : ObjectId("573957c55f74882a9bfa2d9e")},{"$unset":{phone:888}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.test.find(){ "_id" : ObjectId("573957c55f74882a9bfa2d9e"), "name" : "brent", "age" : 30, "email" : "xxxx@qq.com" }
使用"$set"修改内嵌文档:
> db.test.find(){ "_id" : ObjectId("573957c55f74882a9bfa2d9e"), "name" : "brent", "age" : 30, "email" : "xxxx@qq.com" }{ "_id" : ObjectId("57395fa85f74882a9bfa2d9f"), "id" : { "phone" : 888, "address" : "abc" } }>> db.test.update({"_id" : ObjectId("57395fa85f74882a9bfa2d9f")},{"$set":{"id.phone":666}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })>> db.test.find(){ "_id" : ObjectId("573957c55f74882a9bfa2d9e"), "name" : "brent", "age" : 30, "email" : "xxxx@qq.com" }{ "_id" : ObjectId("57395fa85f74882a9bfa2d9f"), "id" : { "phone" : 666, "address" : "abc" } }

"$inc"增加和减少

"$inc"修改器用来增加和减少已有键的值,只能用于整形,长整形或者双精度浮点型的值,用在其它类型的值上面会报错.对于不存在的键,像"$set"那样也会自动创建相应的键,并且值为给定的值 例如我们用"$inc"修改器给age值+1,原来是30,现在变成了31
> db.test.find(){ "_id" : ObjectId("573957c55f74882a9bfa2d9e"), "name" : "brent", "age" : 30, "email" : "xxxx@qq.com" }{ "_id" : ObjectId("57395fa85f74882a9bfa2d9f"), "id" : { "phone" : 666, "address" : "abc" } }> db.test.update({"_id" : ObjectId("573957c55f74882a9bfa2d9e")},{"$inc":{age:1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.test.find(){ "_id" : ObjectId("573957c55f74882a9bfa2d9e"), "name" : "brent", "age" : 31, "email" : "xxxx@qq.com" }{ "_id" : ObjectId("57395fa85f74882a9bfa2d9f"), "id" : { "phone" : 666, "address" : "abc" } }
如果要减少,则将age:1里的1改成-1

"$push"数组修改器-添加元素

如果数组已经存在,那么"$push"会向已有的数组末尾添加一个元素,如果没有就创建一个新的数组 ,下面这个例子会创建一个表示comments的数组:
下载本文

显示全文
专题