【mongodb】mongodb 权威指南笔记之增删改查

插入数据:

1.插入数据:一次性插入多条数据能够明显提升插入速度。
一次性输入数十数百乃至数千的文档会明显提高插入的速度,一次性批量插入只是 单个 TCP请求。避免了许多零碎请求带来的开销,由于无需处理大量的消息头,这样能减少插入时间。单个文档发送到数据库的时候会有个头部信息,告诉数据库对指定的集合做插入操作。用批量插入的话,数据库就不用一个个做头信息处理了。

更新数据

2.update数据的时候要用$set,如果不用 set 会 直接把所有的都用新值覆盖掉。update 第三个参数是 upset =true ,没有时候插入,第四个参数是是否更新多个符合条件的文档。
例子:

db.user_profile.update({user_id:"xxxxx"},{$set:{"permission" : [ "admin", "analysis", "payment", "data"] }})

$inc
$inc 和 $set 的用法类似,是用来增加(和减少)数字的。$inc 只用于整数、长整数,或双精度浮点数,如果是其他类型会导致操作失败。其中包括很多语言会自动转换成数字类型如:null, 布尔类型或者数字构成的字符串。
例子:
要是小球撞到了砖块会给玩家加分,加分可以随便给。假设玩家分数基数是50,使用$inc修改器给玩家加50分。

db.games.update({"game":"pinball","user":"joe"}, {$inc:{"score":50}})

3.修改数组:
使用$addToSet 可以插入不存在的数组,同时可以避免重复

db.user.update({"_id":ObjectId("xxxxxxxxx")}, {$addToSet:{"email": "nihao@nihao.com"}})

$addToSet 和$each 组合使用:

db.user.update({"_id":ObjectId("xxxxxxxx")}, {$addToSet:{"emails":{$each:["nihao@haoa.com","wohao@haoa.com","tahao@haoa.com]}}})

删除

4.删除数据元素
有几个从数组中删除数组元素的方法,若是把数组看成队列或者栈,可以用”$pop”,这个修改器可以从数组的任何一端删除元素。{$pop:{key:1}} 从数组末尾删除一个元素。
{$pop:{key:-1}} 从头删除。 有时要基于特定的条件来删除元素,而不是仅仅根据位置, “$pull” 可以做到。例如,有个待完成事项列表,顺序有些问题。

db.lists.insert({"todo":{["dishes","laundry", "ry cleaning"]}})
# 要把洗衣服删掉 可以从列表中先删掉
db.lists.updata({}, {"$pull":{"todo":"laundry"}})

# $pull会把所有匹配到的删掉  比如 对数组[1,2,1,3,1]执行 pull 1 就会剩下 [2,3]

数组的定位修改器

如果数组有多个值,我们想对其中一部分进操作,就需要一些技巧。有两种方法操作数组中的值,通过位置或者定位操作符(”$”)

可以直接将数组下标作为键来选择元素。
例子:

>db.blog.posts.findOne()
{"_id":ObjectId("xxxxxxx"),
"content":"...."
"comments":
[{
"comment":"good!"
"author":"joe"
"votes": 0
},
{
"comment":"good good!"
"author":"tom"
"votes": 0
},
{
"comment":"good good good!"
"author":"joy"
"votes": 0
}
]}

如果想增加一个评论的投票数量。可以这么做:
db.blog.update({"post":post_id}, {$inc:{comments.0.votes:1})

大部分情况下我们并不知道下标,这时候就用到$了,用来定位查询文档已经匹配到的元素:
db.blog.update({"comments.author":"joy"}, {$inc:{comments.$.votes:1})
值得注意的是 $只会匹配第一个元素, 所以john 有不止一个评论的时候,那么只有第一个匹配到的会被修改。

先写这些吧,心情不好,看书了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值