昨晚跟朋友出去浪了,没有继续学习,只能今天学习然后更下博客啦。
今天照着技术胖的博客继续学习了mongoDB的更新操作。
首先先把例子前提搭好:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 var workmate ={
name:'Mike',
age:20,
sex:1,
job:'UI设计',
skill:{
skillOne:'PhotoShop',
SkillTwo:'UI',
SkillThree:'Word+Excel+PPT'
},
regeditTime:new Date()
}
var db = connect('company');
//创建company数据库
db.workmate.insert(workmate);
//新建workmate集合
$set修改器
用来修改一个指定的键值(key)。1
db.workmate.update({name: "Mike"}, {$set:{age:22}});
而对于文档内嵌文档的修改方式。使用点操作符
1 | db.workmate.update({name: "Mike"}, {$set: {"skill.SkillThree": "word"}}); |
$unset修改器
用于删除指定的key
1 | db.workmate.update({name: "Mike"}, {$unset: {age: ''}}); |
$inc修改器
对数据进行修改
1 | db.workmate.update({name: "Mike"}, {$inc: {age: -2}}); |
multi
为所有的数据都添加上一个字段。设置multi
为true
,否则只为第一个数据增加了字段
1 | db.workmate.update({}, {$set: {interest: []}}, {multi: true}); |
此时所有数据都添加上了interest
这个字段。
upsert
当需要新增数据时,upsert在找不到值的情况下,可以直接插入这条数据。设置upsert
为true
1 | db.workmate.update({name: "John"}, {$set: {age: 20}}, {upsert: true}); |
运行结果显示,新增了John
这一行数据。
$push
用于操作数组
1 | db.workmate.update({name: "John"}, {$push: {interest: 'draw'}}); |
$ne
$ne主要的作用是,检查一个值是否存在,如果不存在再执行操作,存在就不执行。
1 | db.workmate.update({ name: "John", interest: { $ne: "playGame" } }, { $push: { interest: "Game" } }); |
$addToSet
查找是否存在,不存在就push上去。相比$ne更容易理解。
1 | db.workmate.update({ name: "John" }, { $addToSet: { interest: "readBook" } }) |
$each修改器
它可以传入一个数组,一次增加多个值进去。
1 | var newInterset = ["Sing", "Dance", "Code"]; |
$pop
用于删除数组值。
$pop只删除一次,并不是删除所有数组中的值。而且它有两个选项,一个是1和-1。
1:从数组尾部进行删除
-1:从数组头部进行删除
1 | db.workmate.update({ name: 'John' }, { $pop: { interest: 1 } }) |
接下来看一点高级的1
2db.workmate.update({sex: 1}, {$set: {money: 1000}}, false, true);
//上面一句等同于这一句:db.workmate.update({sex: 1}, {$set: {money: 1000}}, {upsert: false}, {multi: true});
与之有异曲同工之妙的如下语句
1 | var myModify = { |
runCommand可以执行数据库操作的语句
两者都是执行更新操作,但是后者的安全性能相对较高,更加值得学习。