MongoDB——更新文档详解

更新文档

//语法
db.collection.update
(
	<query>, //查询条件
	<update>, //更新文档对象,含操作符功能
	{ //可选参数
		upsert: <boolean>,
		multi: <boolean>,
		writeConcern: <document>,
		collation: <document>
	}
)

  1. query:update的查询条件
  2. update:update的更新对象和一些更新的操作符
  3. upsert:可选。如果不存在update的记录,是否插入objNew:true为插入,默认是false,不插入
  4. multi:可选:默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
  5. writeConcern:可选,自定义写出错确认级别
  6. collation:可选,指定特定国家语言的更新归类规则

返回值:
7. 更新成功,返回WriteResult({“nUpdated”: n})对象
8. 更新失败,返回结果中会包含WriteResult.writeConcernError对象字段内容

修改一条简单文档

商品购物单1 -> 商品购物单2 【$set】

db.order.insert({title:"商品购物单1", amout:35, detail:[{name:"苹果", price:22}, {name:"面粉", price:18}]})

db.order.update({title: "商品购物单1"}, {$set: {title:"商品购物单2"}})

MongoDB——更新文档详解_第1张图片

修改商品数量:
$inc:做加法运算,可以是正数、负数,也可以是小数

db.order.update({title: "商品购物单2"}, {$inc: {amout: 5}})

MongoDB——更新文档详解_第2张图片

$mul:做惩罚运算,可以是正数、负数,也可以是小数

db.order.update({title: "商品购物单2"}, {$mul: {amout: 2}})

MongoDB——更新文档详解_第3张图片

修改错误字段的键名:【$rename】

db.order.update({title:"商品购物单2"}, {$rename: {"title": "titleee"}})

MongoDB——更新文档详解_第4张图片

删除一个字段:【$unset】

db.order.update({titleee: "商品购物单2"}, {$unset: {titleee: "商品购物单2"}})

MongoDB——更新文档详解_第5张图片

比较操作符:【$min】【$max】

将$min给出的值与当前文档字段值进行比较,当给定值较小时则修改当前文档值为给定值

db.order.update({title: "商品购物单2"}, {$min: {amout: 50}})

MongoDB——更新文档详解_第6张图片
将$max给出的值与当前文档字段值进行比较,当给定值较大时则修改当前文档值为给定值

db.order.update({title: "商品购物单2"}, {$max: {amout: 50.5}})

MongoDB——更新文档详解_第7张图片

修改一条文档里的数组和嵌套文档
db.order.insert(
	{
		_id: 12,
		title: "商品购物单5",
		amount: 90,
		unit: "元",
		detail: [
			{name: "葡萄", price: 60},
			{name: "面粉", price: 30}
		],
		lasttime: ISODate("2017-06-03 15:48:55"),
		overview: {shop: "钉钉电子商务平台", shopno: 5, address: "地球村"}
	}	
)

对文档里的子文档值进行修改,可以通过主Key.SubKey的组合来实现指定子文档字段对应值的修改;对于数组值的修改,可以通过Key.Number的方式指定修改数组值,
Number从0,1…开始,对应数组的第一个下标、第二个下标…

db.order.update(
  {_id: 12},
  {
    $set: {
      "detail.1": {name:"大米", price: 40}, 
      "overview.address": "北京市"
    }
  }
)

//注意:引入数组或嵌入文档对象时,都需要加引号"",中间用点号隔离

MongoDB——更新文档详解_第8张图片

多文档修改

使用multi选项:
MongoDB——更新文档详解_第9张图片

db.person.update({}, {$set: {age: 20}}, {multi: true})

MongoDB——更新文档详解_第10张图片

增加文档字段

Update命令在特定情况下,可以增加文档的字段,甚至实现insert命令功能。这个特定条件是要修改的文档没有要修改的字段,而且update命令带upsert选项。

db.person.update(
	{name: "jerry"},
	{$set: {weight: 66.2}},
	{upsert: true}
)
collation参数使用
collation: {
	locale: <string>,
	caseLevel: <boolean>,
	caseFirst: <string>,
	strength: <int>,
	numericOrdering: <boolean>,
	alternate: <string>,
	maxVariable: <string>,
	backwards: <boolean><
	normalization <Boolean>
}

3个更新的简化命令

MongoDB在3.2版开始提供新的经过简化的3种修改命令。

  1. db.collection.updateOne()。与update()唯的区别是命令语法里少了一个multi::选项,也就是updateOne(只适用于符合条件的一条文档的修改任务。
  2. db.collection.updateMany()。与update(唯一的区别是命令语法里少了一个multi:选项,也就是updateMany()只适用于符合条件的多条文档的修改任务。
  3. db.collection.replaceOne()。与update()的区别有两处,一个没有multi:选项;另外一个在第二个参数(update的)里不能有更新操作符。

你可能感兴趣的:(MongoDB,mongodb,数据库,服务器)