mongodb常用命令2

数组修改器:

$push:往数组中追加值,如果数组不存在,则创建
例如:db.mydb.user.update({name:”test1”},{$push:{hobby:”drink”}})


$push+$ne :如果值数组中不存在则追加(但是不能追加多个)。
例如: db.mydb.user.update({name:”test1”,hobby:{$ne:”drink”}},{$push:{hobby:”drink”}})


$push+$ne :同上(可以追加多个)。
例如:db.mydb.user.update({name:”test1”},{$addToSet :{hobby :{$each:[“drink”,”sing”]}}})


$pop:修改器用于删除数组里面值,如果把数组看成一个队列或者栈的话,可以从数组任何一端删除元素。
用法:
{$pop:{键:1}}  - 从数组尾部删除一个元素
{$pop:{键:-1}} - 从数组头部删除一个元素
例如:db.mydb.user.update({name:”test1”},{$pop :{hobby:1}})

注意:正数代表从尾部删除,负数代表从头部删除(无论值是不是1,都是删除一个元素)


$pull:删除数组里面所有匹配到的值
 例如:db.mydb.user.update({name:”test1”},{$pull :{hobby:”drink”}})


$: 用于数组里面值的数据类型为内嵌文档。

例如:
 posture:[{height:”175cm”,age:20},{height:”180cm”,age:26}]
1)数组都是0开头的,可以通过下标直接选择要修改的元素:
db.mydb.user.update({name:”test1”},{“$inc” :{“posture.0.age”:1}})
2)使用定位修改器$修改,代表修改当期匹配到的这一条:
db.mydb.user.update({“posture.age” :21},{“$set” :{“posture.$.height”:”178cm”}})




upsert:

update中第三个参数,不写默认为false,当为true的时候,如果匹配的文档不存在,会基于匹配文档创建一个新的文档增加到集合中(说白了,有就更改,没有就更改后添加)

例如:找到age为24的记录,+1

db.mydb.user.update({age:24},{$inc:{age:1}},true)

如果没有该条记录,它也会基于匹配age:24再+1后,添加新纪录到user中
思考问题:db.mydb.user.update({name:”test3”,age:24},{$inc:{age:1}},true) ?

save 函数其实就是upsert的实现。
例如:
 db.mydb.user.update({name:”test3”},{name:”test3”,age:24},true)
等价于:
 db.mydb.user.save({name:”test3”,age:24}) 



mutil:
update中的第四个参数,不写默认为false,只更新第一条匹配到的记录;当为true的时候,代表对所有匹配到的记录都更新

例如:所有名称为test3的年龄加2
 db.mydb.user.update({name:”test3”},{$inc:{age:2}, false, true})


想要知道多少文档进行了更新,在执行完update操作后,可以运行getLastError命令,返回值中键“n”的值就是代表更新数。
例如:
db.mydb.user.update({name:”test3”},{$inc:{age:2}, false, true})
db.runCommand({getLastError:1})


但是getLastError只能返回很有限的信息,想要更多的信息,可以使用findAndModify,用法如下:

db.集合名.findAndModify({
query:{匹配文档},
update:{更新文档}
[,remove:布尔值,sort:{排序文档},new:布尔值]
})


query: 匹配文档,也就是查询条件
 sort:  排序匹配文档的条件
 update: 修改器文档,执行文档更新操作
 remove: true/false,是否对匹配到的文档进行删除
 new: true/false, 表示返回的是更新前还是更新后的文档,默认值是false


findAndModify 注意点:
    update 与remove 必须而且只能存在一个。
    它一次只能操作一个文档,不能进行upsert操作,只能更新已存在的文档。
findAndModify 执行效率有点低,话虽这么说,不代表避免使用,mongo每一个函数的存在,都有其实际存在的价值。它的执行效率相当于 一次查询、更新外加getLastError 顺序执行的时间。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值