接着上篇文章
一:更改
db.collection.update(查询表达式,新值,选项)
例:修改stu集合里,name为lilei的年龄,由原来的19变为32;
db.stu.update({"name":"lilei"},{"age":32});这条语句正确吗?
注意:上面语句执行后,提示一条文档记录被修改成功了,但是我们再查询看到的结果是,原来的记录name属性丢失了。。。。Why?
因为,上面语句表达的真实含义是把{“name":"lilei","age":19}修改成{”age":32}。
正确的写法:db.stu.update({"name":"lilei"},{$set:{"age":32}});
$set: 修改某列的值
$unset: 删除某列
$rename: 重命名某列
$inc: 增长某列
这里有个option选项,{update:true/false}
当设置为true时,表示查询到匹配记录就修改,没有查到就新规插入。有则该,无则增。
二:查询
1):查询当前集合中所有文档
db.stu.find();
2):查询符合条件的文档
db.stu.find({"name":"lilei"});
3):查询指定列
db.stu.find({"name":"hmm"},{"age":1});
这里会默认把_id列也查询出来,这是主key.
4):find查询所有记录,findOne查询满足条件的第一条
5):查询表达式里含不等于的写法$ne
db.stu.find({"age":{$ne:19}});
从查询出来的结果可以发现,不含有age属性的文档也会被查询出来,怎么办?
6): in的写法$ in[]
db.stu.find({"age":{$in:[20,21,30,32]}}):
7):not in 的写法$nin[]
db.stu.find({"age":{$nin:[20,32]}});
8):where的写法,这种写法不推荐,速度很慢
db.stu.find({$where:{"this.age==19"}}); 注意一定是两个等号,一个等号会将所有记录都查询出来,相当于赋值