MongoDB常用命令及例子详细介绍(三)(二)
set,批量更新
db.c1.update({name:"user6"},{$set:{name:"user66"}},0,1); --将所有的name=user6的全部更新user66
2):$set 增加字段,或批量修改字段值(存在则更新,不存在则增加)
db.c1.update({name:"user6"},{$set:{name:"user66"}},0,1); --批量修改name值
db.c1.update({name:"user10"},{$set:{age:10}},0,1); --将name=user1的全部加上 age字段,且值=10
3):$inc -->increment自增的意思,如果字段有则加减(自己定),没有则新增
场景:现在在大促了,想给没给会员赠送5个积分,但是:积分字段有的会员没有有的有的情况
现在想没有积分字段的会员也得加5分,$inc就能做到
db.c1.insert({name:"leyangjun",age:23,score:11});
db.c1.insert({name:"leyangjun",age:23,score:1});
db.c1.insert({name:"leyangjun",age:23});
--加积分
db.c1.update({},{$inc:score:10},0,1); --{}表示所有用户,都加10个积分,没有score字段的,$inc会统一加上
db.c1.update({name:"user1"},{$inc:score:10}); 加减都行
db.c1.update({name:"user1"},{$inc:score:-10});
*set 和 $inc 都可以增加字段,但是$inc增加必须是整型
4):$unset 删除字段(自带的_id字段是删不鸟的)
db.c5.update({},{$unset:{score:1},0,1); --1表示true,将所有记录中的score字段删掉
db.c5.update({},{$unset:{score:1,age:1},0,1); --删除多个
5):$push 针对数组增加元素(更新的魔术方法一般在字段的外侧,查询是在内侧)
db.c3.insert({name:"user1",arr:[1,2,3]});
db.c3.update({name:"user1"},{$push:{arr:4}}); --name=user1的arr增加元素,记住不能同时插入多个(可以压数组,就是不能同时压入多个值)
6):$pop 将字段里的最后元素移除,针对数组
db.c3.update({name:"user1"},{$pop:{arr:1}}); --1表示最后一个,将arr里面的最后元素移除
db.c3.update({name:"user1"},{$pop:{arr:-1}}); -- -1表示删除第一个值
7):$pushAll 压入多个值
db.c3.update({name:"user1"},{$push:{arr:[4,5,6]}}); ---压入多个值
8):$addToSet 压入值是会去重复插入(如值里面有4,在这么插入里面只会有一个4)
db.c3.update({name:"user1"},{$addToSet:{arr:4}}); --如果值里面有4,是插入不进去的,没有重复的则插入
$addToSet 和 $each 配合使用插入多个:
db.c3.update({name:"user1"},{$addToSet:{arr:{$each:[7,8,9]}}}); --插多个
9):$pull 删除数组里面的某个值,针对数组
db.c3.update({name:"user1"},{$pull:{arr:5}}); --删除数组中为5的值
10):$pullAll一次性删除多个
db.c3.update({name:"user1"},{$pullAll:{arr:[2,4]}}); --删除值为2,4
11):$rename修改字段名
db.c3.update({name:"user1"},{$rename:{arr:"post"}}); 或
db.c3.update({name:"user1"},{$rename:{"arr":"post"}});
12):特殊的操作符号 $
db.c3.insert({name:"user1",arr:[{tit:"php"},{tit:"java"},{tit:"linux"}]});
把标题为linux的值改下:
db.c3.update({"arr.tit":"linux"},{$set:{"arr.$.cnt":"linux is very good"}});
*小结:
场景1:
db.c1.insert({name:"leyangjun",age:23});
var x=find({name:"user1"});
x --回车有值
x --在回车没值了,所以find本身是带有游标的
场景2:
var x=findOne({name:"user1"});
x --回车有数据 x是一个json,在mogodb客户端的时候输出你就能看看出来
x --回车还有数据
x.sex="nan" --可以加字段,但是这加的字段是不会直接加到数据记录
x.sex="score"
......
把x加字段,直接保存到
数据库
db.c1.save(x); --数据就加到里面去啦,
db.c1.insert({name:"leyangjun",age:23}); ---增
db.c1.remove(); ---删(删除所有)
db.c1.remove({"name":"leyangjun"}); --删除名字等于leyangjun的记录
db.c1.update({name:"leyangjun"},{name:"lekey"}); ---改,(如果还有age值的话,会被删除,只留下name值)
db.c1.update({name:"leyangjun"},{$set:{name:"lekey"}}); --改,这个改会保留原有的值
db.c1.update({name:"lekey"},{$set:{sex:"nan"}}); --还可增加值,名字等于lekey记录增加字段值sex
db.c1.find(); ---查
db.c1.find({"name":"leyangjun"});
***普