mongoDB-----针对某个或多个文档只需要部分更新可使用原子的更新修改器

 update()

db.collection.update( <query>, <update>, {
                 upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )

db.collection.update( criteria, objNew, upsert, multi )    四个参数的说明如下:

criteria: update的查询条件,类似sql update查询内where后面的

objNew: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert: 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi: mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

1、$inc

修改器$inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。数字 型加减运算

示例文档:{"uid":"201203","type":"1",size:10}

> db.b.insert({"uid":"201203","type":"1",size:10})
> db.b.find()
{ "_id" : ObjectId("5003b6135af21ff428dafbe6"), "uid" : "201203", "type" : "1",
"size" : 10 }
> db.b.update({"uid" : "201203"},{"$inc":{"size" : 1}})
> db.b.find()
{ "_id" : ObjectId("5003b6135af21ff428dafbe6"), "uid" : "201203", "type" : "1",
"size" : 11 }
> db.b.update({"uid" : "201203"},{"$inc":{"size" : 2}})
> db.b.find()
{ "_id" : ObjectId("5003b6135af21ff428dafbe6"), "uid" : "201203", "type" : "1",
"size" : 13 }
> db.b.update({"uid" : "201203"},{"$inc":{"size" : -1}})
> db.b.find()
{ "_id" : ObjectId("5003b6135af21ff428dafbe6"), "uid" : "201203", "type" : "1",
"size" : 12 }

 

2.$set

用来指定一个键并更新键值,若键不存在并创建新的一条数据

要在嵌入的文档或数组中指定一个字段,请使用点符号。

db.a.findOne({"uid" : "20120002","type" : "3"})

{ "_id" : ObjectId("500216de81b954b6161a7d8f"), "desc" : "hello world2!", "num": 40, "sname" : "jk", "type" : "3", "uid" : "20120002" }

1)size键不存在的场合

db.a.update({"uid" : "20120002","type" : "3"},{"$set":{"size":10}})

db.a.findOne({"uid" : "20120002","type" : "3"})
{ "_id" : ObjectId("500216de81b954b6161a7d8f"), "desc" : "hello world2!", "num"
: 40, "size" : 10, "sname" : "jk", "type" : "3", "uid" : "20120002" }

2)sname键存在的场合
> db.a.update({"uid" : "20120002","type" : "3"},{"$set":{"sname":"ssk"}})
> db.a.find()
{ "_id" : ObjectId("500216de81b954b6161a7d8f"), "desc" : "hello world2!", "num"
: 40, "size" : 10, "sname" : "ssk", "type" : "3", "uid" : "20120002" }
{ "_id" : ObjectId("50026affdeb4fa8d154f8572"), "desc" : "hello world1!", "num"
: 50, "sname" : "jk", "type" : "1", "uid" : "20120002" }

3)可改变键的值类型
> db.a.update({"uid" : "20120002","type" : "3"},{"$set":{"sname":["java",".net","c++"]}})

db.a.findOne({"uid" : "20120002","type" : "3"})
{
        "_id" : ObjectId("500216de81b954b6161a7d8f"),
        "desc" : "hello world2!",
        "num" : 40,
        "size" : 10,
        "sname" : [
                "java",
                ".net",
                "c++"
        ],
        "type" : "3",
        "uid" : "20120002"
}

4)对于内嵌的文档,$set又是如何进行更新的内嵌的文档的呢,请看下面的示例:
  示例文档:{"name":"toyota","type":"suv","size":{"height":10,"width":5,"length":15}}

  > db.c.findOne({"name":"toyota"})
  {
          "_id" : ObjectId("5003be465af21ff428dafbe7"),
          "name" : "toyota",
          "type" : "suv",
          "size" : {
                  "height" : 10,
                  "width" : 5,
                  "length" : 15
          }
  }

d

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值