mongo对内嵌数组的操作

由于mongo的弱关联关系,导致mongo的内嵌数组会被频繁使用,以达到一定的"关联关系"。所以对mongo的数组的操作也是非常重要的。接下来简单的介绍一下mongo对数组的操作,至于用java进行这些操作,请参考java对mongo的基本操作,套用一下即可

1、增加

操作符:$push 向已有的数组末尾加入一个元素,若数组不存在则会自动创建数组,可以增加重复元素。

例句:db.blog.update({"title":"A"},{$push:{"comments":{"testAdd":"T"}}});

则向blog集合中的title为A的文档中的comments数组中的末尾增加了{"testAdd":"T"}记录,如果文档中没有comments数组,则会自动创建comments数组,然后进行添加,但是如果匹配的条件{"title":"A"}不存在则不会自动添加,而是添加失败。

操作符:$addToSet 可以向数组内增加元素,但是如果元素已存在(重复元素),则增加失败

例句:db.blog.update({"title":"A"},{$addToSet:{"comments":{"testAdd":"T"}}});

则向blog集合中的title为A的文档中的comments数组中的末尾增加了{"testAdd":"T"}记录,如果文档中没有comments数组,则会自动创建comments数组,但是如果第二次执行同样的语句则会发现数据库中并没有进行添加操作,因为数据这时重复了

$addToSet还可以和$each进行配合使用,一次向数组中添加多条内容

例句:db.blog.update({"title":"A"},{$addToSet:{"comments":{$each:[{"testAdd":"T"},{"testAdd":"X"}]}}});

则向blog集合中的title为A的文档中的comments数组中的末尾增加了{"testAdd":"T"}和{"testAdd":"X"}记录,这里注意$each后面跟的是一个数组,他会遍历数组中的内容,一一执行

2、删除

操作符:$pop 从数组的一端删除元素

例句:db.blog.update({"title":"A"},{$pop:{"comments":1}});

则删除了blog集合中的title为A的文档中的comments数组中的最后一条记录,1::删除最后一条数据,-1:删除第一条数据

但是很多情况下我们需要根据条件去删除一下数组中的记录,这是$pop就帮不上什么忙了,就需要下一个操作符了

操作符:$pull

例句:db.blog.update({"title":"A"},{$pull:{"comments":{"testAdd":"T"}}});

则删除了blog集合中的title为A的文档中的comments数组中所有满足条件{"testAdd":"T"}的元素

3、修改

操作符:$set修改数组中的元素

例句:db.blog.update({"comments.testAdd":"T"},{$set:{"comments.$.testAdd":"z"}});

这里注意第一个查询条件必须数组.字段名,否则修改失败,有人可能会问后面的{"comments.$.testAdd":"z"}中的$符是干嘛用的,他在这里面代表的相当于是数组的下表,如果我们明确的知道下标的话,我们完全可以这么写,比如下表为0:{"comments.0.testAdd":"z"},但大多数情况下我们是不知道下标的,所以用通配符$来表示,这样只会修改匹配的第一条数据,而不是所有匹配到的数据,这点需要注意

4、查询

例句:db.blog.find({"comments.testAdd":"T"})

这里返回的是整个文档,至于如何返回想要的结果接下来的博客会介绍。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值