[TOC] ## 概述 mongodb不支持事务,使用原子操作来删改文档 ### findAndModify和update有什么区别 1. 默认情况下,findAndModify()方法返回 文档 的预修改版本。 要获取更新的文档,请使用新选项, update()方法返回一个包含操作状态的WriteResult对象 2. update()方法可以修改多个文档 3. 如果多个文档符合更新条件,那么对于findAndModify(),您可以指定一个sorting来提供某种控制措施来更新要更新的文档。 使用update()方法的默认行为,当多个文档匹配时,不能指定要更新哪个文档 4. ## 常用命令 ### $set 添加一个属性 用来指定一个键并更新键值,若键不存在并创建。 ``` { $set : { field : value } } ``` 实例:添加 address属性 ``` db.test.insert({name:"1234",age:123}) db.test.findAndModify({ query: { name: "1234" }, update: { $set: { address: "zj" } } }) /** { "_id": ObjectId("5e0b0ddd81ce6f4e10006472"), "name": "1234", "age": 123, "address": "zj" } */ ``` ### $unset 删除属性 用来删除一个键。 ``` { $unset : { field : 1} } ``` 实例 ``` db.test.insert({name:"1234",age:"123"}) db.test.findAndModify({ query: { name: "1234" }, update: { $unset: { age: 1 } } }) /** { "_id": ObjectId("5e0b0ddd81ce6f4e10006472"), "name": "1234" }*/ ``` ### $inc 对曾数增减操作 某个值为数字型(只能为满足要求的数字)的键进行增减 ``` { $inc : { field : value } } ``` ``` db.test.insert({name:"1234",age:123}) db.test.findAndModify({ query: { name: "1234" }, update: { $inc: { age: -13 } } }) ``` ### $push 追加到数组中 `{ $push : { field : value } }` ``` db.test.insert({name:"1234",age:123,tel:[123,345]}) db.test.findAndModify({ query: { name: "1234" }, update: { $push: { tel: [888] } } }) /** { "_id": ObjectId("5e0b100581ce6f4e10006475"), "name": "1234", "age": 123, "tel": [ 123, 345, 777, ] } */ ``` ### $pushAll 追加多个值 同$push,只是一次可以追加多个值到一个数组字段内。 `{ $pushAll : { field : value_array } }` ### $pull 从数组field内删除一个等于value值。 { $pull : { field : _value } } #### 索引数组 ``` db.test.insert({name:"1234",age:123,tel:[123,345]}) db.test.findAndModify({ query: { name: "1234" }, update: { $pull: { tel: 123 } } }) /* { "_id": ObjectId("5e0b112c81ce6f4e10006476"), "name": "1234", "age": 123, "tel": [ 345 ] } */ ``` #### 对象数组 ``` db.test.insert({name:"1234",age:123,tel:[{a:1,b:3},{a:2,b:6}]}) db.test.findAndModify({ query: { name: "1234" }, update: { $pull: { tel:{ a:1 } } } }) /** { "_id": ObjectId("5e0b126181ce6f4e1000647e"), "name": "1234", "age": 123, "tel": [ { "a": 2, "b": 6 } ] } */ ``` ### $addToSet 当值不存在,追加到数组 实例 ``` db.test.insert({name:"1234",age:123,tel:[1,2,3]}) db.test.update( { name: "1234" }, { $addToSet: { tel:3 } } ) /* { "_id": ObjectId("5e0b144981ce6f4e10006487"), "name": "1234", "age": 123, "tel": [ 1, 2, 3 ] } */ ``` ### $pop ``` { $pop : { field : 1 } } 1 删除最后一个 -1 删除第一个 ``` ``` db.test.insert({name:"1234",age:123,tel:[1,2,3]}) db.test.update( { name: "1234" }, { $pop: { tel:1 } } ) /** { "_id": ObjectId("5e0b14a281ce6f4e10006488"), "name": "1234", "age": 123, "tel": [ 1, 2 ] } */ ``` ### $rename 重命名字段 `{ $rename : { old_field_name : new_field_name } } ` 实例 ``` db.test.insert({name:"1234",age:123,tel:[1,2,3]}) db.test.update( { name: "1234" }, { $rename: { age:"age_new" } } ) ``` ### $bit