$set 更新或添加属性
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| { "_id" : 1.0, "arr" : [ { "item" : "A" }, { "item" : "B", "score" : 4.0, "answers" : [ { "q" : 1.0, "a" : 0.0 } ] } ] }
|
添加属性
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$set: {"arr.0.score": 10}} )
|
更新属性
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$set: {"arr.1.score": 10}} )
|
结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| { "_id" : 1.0, "arr" : [ { "item" : "A", "score" : 10.0 }, { "item" : "B", "score" : 10.0, "answers" : [ { "q" : 1.0, "a" : 0.0 } ] } ] }
|
$unset 删除对象的属性或把数组的其中一项变成null
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| { "_id" : 1.0, "arr" : [ { "item" : "A", "score" : 5.5 }, { "item" : "B", "score" : 4.0, "answers" : [ { "q" : 1.0, "a" : 0.0 }, { "q" : 1.0, "a" : 0.0 } ] } ] }
|
删除一个指定的字段
1 2 3 4 5
| db.getCollection('user').update( {"_id": 1.0}, {$unset: {"arr.0.score": 1}} )
|
当匹配到的是数组元素,$unset替换指定的元素为null而不是删除掉指定的元素,此行为保持数组大小和位置不变;
1 2 3 4 5
| db.getCollection('user').update( {"_id": 1.0}, {$unset: {"arr.1.answers.1": 1}} )
|
结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| { "_id" : 1.0, "arr" : [ { "item" : "A" }, { "item" : "B", "score" : 4.0, "answers" : [ { "q" : 1.0, "a" : 0.0 }, null ] } ] }
|
$rename 重新命名属性名(不能操作数组)
例
1 2 3 4 5 6
| { "_id" : 1.0, "name" : { "gge" : 18 } }
|
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$rename: {"name.gge": "name.age"}} )
|
结果
1 2 3 4 5 6
| { "_id" : 1.0, "name" : { "age" : 18 } }
|
$pop 删除数组中的第一个或者最后一个元素(给$pop传递-1会删除第一个元素传递1会删除最后一个元素)
例
1 2 3 4 5 6 7 8 9 10
| { "_id" : 1.0, "arr" : [ 1, 2, 3, 4, 5 ] }
|
删除数组第一个
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$pop: {"arr": -1}} )
|
删除数组最后一个
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$pop: {"arr": 1}} )
|
结果
1 2 3 4 5 6 7 8
| { "_id" : 1.0, "arr" : [ 2, 3, 4 ] }
|
$pull 删除数组中符合条件的元素
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| { "_id" : 1.0, "arr" : [ { "a": 2, "b": 5, "c": 8 }, { "a": 6, "b": 7, "c": 8 } ] }
|
删除数组arr中的a>=5的项
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$pull: {"arr": {"a": {$gte: 5}}}} )
|
结果
1 2 3 4 5 6 7 8 9 10
| { "_id" : 1.0, "arr" : [ { "a" : 2, "b" : 5, "c" : 8 } ] }
|
使用$elemMatch匹配多个条件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| { "_id" : 1.0, "arr" : [ { "c" : [ { "a" : 10, "b" : 10 }, { "a" : 15, "b" : 15 } ] }, { "c" : [ { "a" : 20, "b" : 20 }, { "a" : 25, "b" : 25 } ] } ] }
|
删除arr数组 中的c数组中 (a=25 && b=25)
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$pull: {"arr": {"c": {$elemMatch: {"a": 25,"b":25}}}}} )
|
结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| { "_id" : 1.0, "arr" : [ { "c" : [ { "a" : 10, "b" : 10 }, { "a" : 15, "b" : 15 } ] } ] }
|
$push 向已有的数组末尾加入一个元素
例
1 2 3 4 5 6
| { "_id" : 1.0, "arr" : [ 5 ] }
|
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$push: {"arr": 10}} )
|
结果
1 2 3 4 5 6 7
| { "_id" : 1.0, "arr" : [ 5, 10.0 ] }
|
使用$position添加到任意位置
1 2 3 4 5
| db.getCollection('user').update( {"_id": 1.0}, {$push: {"arr": {$each: [15,16,17,18], $position: 1}}} )
|
结果
1 2 3 4 5 6 7 8 9 10 11
| { "_id" : 1.0, "arr" : [ 5, 15.0, 16.0, 17.0, 18.0, 10.0 ] }
|
$sort 数组排序
1为升序排列,-1为降序排列
1 2 3 4 5 6 7 8 9 10
| { "_id" : 1.0, "arr" : [ 3, 1, 5, 2, 6 ] }
|
1 2 3 4
| db.getCollection('user').update( {"_id": 1.0}, {$push: {"arr": {$each: [], $sort: 1}}} )
|
结果
1 2 3 4 5 6 7 8 9 10
| { "_id" : 1.0, "arr" : [ 1, 2, 3, 5, 6 ] }
|
2. 根据数组的某一项排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| { "_id" : 1.0, "arr" : [ { "a" : 5, "b" : 6 }, { "a" : 3, "b" : 6 }, { "a" : 2, "b" : 6 }, { "a" : 4, "b" : 6 }, { "a" : 5, "b" : 6 } ] }
|
1 2 3 4 5
| db.getCollection('user').update( {"_id": 1.0}, {$push: {"arr": {$each: [], $sort: {"a": 1}}}} )
|
结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| { "_id" : 1.0, "arr" : [ { "a" : 2, "b" : 6 }, { "a" : 3, "b" : 6 }, { "a" : 4, "b" : 6 }, { "a" : 5, "b" : 6 }, { "a" : 5, "b" : 6 } ] }
|
$slice 数组截取
正数则从前向后,负数从后向前
1 2 3 4 5 6 7 8 9 10
| { "_id" : 1.0, "arr" : [ 1, 2, 3, 4, 5 ] }
|
1 2 3 4 5
| db.getCollection('user').update( {"_id": 1.0}, {$push: {"arr": {$each: [], $slice: -3}}} )
|
结果
1 2 3 4 5 6 7 8
| { "_id" : 1.0, "arr" : [ 3, 4, 5 ] }
|
占位符$,更新数组的某一项不确定位置的值
例1
1 2 3 4
| { "_id" : 1.0, "arr" : [ 3, 4, 5, 20 ] }
|
1 2 3 4 5
| db.getCollection('user').update( {"_id": 1.0, "arr": 20}, {$set: {"arr.$": NumberInt(10)}} )
|
结果
1 2 3 4
| { "_id" : 1.0, "arr" : [ 3, 4, 5, 10 ] }
|
例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| { "_id" : 1.0, "arr" : [ { "a" : 1, "b" : 10 }, { "a" : 2, "b" : 20 }, { "a" : 3, "b" : 30 } ] }
|
1 2 3 4 5
| db.getCollection('user').update( {"_id": 1.0, "arr.a": 2}, {$set: {"arr.$.b": NumberInt(200)}} )
|
结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| { "_id" : 1.0, "arr" : [ { "a" : 1, "b" : 10 }, { "a" : 2, "b" : 200 }, { "a" : 3, "b" : 30 } ] }
|