美文网首页
mongo对内嵌数组的简单操作

mongo对内嵌数组的简单操作

作者: 流光汐舞 | 来源:发表于2018-03-13 17:24 被阅读0次

    由于mongo的弱关联关系,导致mongo的内嵌数组会被频繁使用,以达到一定的"关联关系"。所以对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 从数组的一端删除元素,
    1 :删除最后一条数据,
    -1:删除第一条数据
    
    例句:db.blog.update({"title":"A"},{$pop:{"comments":1}});
    则删除了blog集合中的title为A的文档中的comments数组中的最后一条记录,
    

    但是很多情况下我们需要根据条件去删除一下数组中的记录,这是$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"})
    

    相关文章

      网友评论

          本文标题:mongo对内嵌数组的简单操作

          本文链接:https://www.haomeiwen.com/subject/bvozfftx.html