Fork me on GitHub

mongo学习笔记(二)

学习mongoDB更新操作 | 900*0

学习mongoDB的修改(update)操作。

昨晚跟朋友出去浪了,没有继续学习,只能今天学习然后更下博客啦。

今天照着技术胖的博客继续学习了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
2
db.workmate.update({name: "Mike"}, {$inc: {age: -2}});
//直接减2得到想要的数字。这里想要得到18,而原本是20
multi

为所有的数据都添加上一个字段。设置multitrue,否则只为第一个数据增加了字段

1
db.workmate.update({}, {$set: {interest: []}}, {multi: true});

此时所有数据都添加上了interest这个字段。

upsert

当需要新增数据时,upsert在找不到值的情况下,可以直接插入这条数据。设置upserttrue

1
db.workmate.update({name: "John"}, {$set: {age: 20}}, {upsert: true});

运行结果显示,新增了John这一行数据。

$push

用于操作数组

1
2
db.workmate.update({name: "John"}, {$push: {interest: 'draw'}});
//为interest数组新增了'draw'的元素
$ne

$ne主要的作用是,检查一个值是否存在,如果不存在再执行操作,存在就不执行。

1
2
db.workmate.update({ name: "John", interest: { $ne: "playGame" } }, { $push: { interest: "Game" } });
//如果interest中有playGame,则不添加Game。否则添加
$addToSet

查找是否存在,不存在就push上去。相比$ne更容易理解。

1
2
db.workmate.update({ name: "John" }, { $addToSet: { interest: "readBook" } })
//interest数组中不存在'readBook',则将'readBook'添加上
$each修改器

它可以传入一个数组,一次增加多个值进去。

1
2
var newInterset = ["Sing", "Dance", "Code"];
db.workmate.update({ name: "John" }, { $addToSet: { interest: { $each: newInterset } } })
$pop

用于删除数组值。

$pop只删除一次,并不是删除所有数组中的值。而且它有两个选项,一个是1和-1。
1:从数组尾部进行删除
-1:从数组头部进行删除

1
db.workmate.update({ name: 'John' }, { $pop: { interest: 1 } })

接下来看一点高级的

1
2
db.workmate.update({sex: 1}, {$set: {money: 1000}}, false, true);
//上面一句等同于这一句:db.workmate.update({sex: 1}, {$set: {money: 1000}}, {upsert: false}, {multi: true});

与之有异曲同工之妙的如下语句

1
2
3
4
5
6
7
8
9
var myModify = {
findAndModify: 'workmate',//需要查找或修改的集合
query: 'Mike',//指定哪条数据
update: {$set: {age: 29}},//进行修改
new: true //返回更新前的文档(false)还是更新后的文档(true)
}

var resultMessage = db.runCommand(myModify);//使用runCommand来执行语句
printjson(resultMessage);//以json形式打印结果

runCommand可以执行数据库操作的语句

两者都是执行更新操作,但是后者的安全性能相对较高,更加值得学习。