zoukankan      html  css  js  c++  java
  • MongoDB update修改器: 针对Arrays的$修改器 $push $pull $pop

    针对Arrays的$修改器

     $push :

      { $push: { key: value } }

    它是用来对Array (list)数据类型进行 增加 新元素的,相当于我们Python中 list.append() 方法

    做一个小例子 :首先我们要先对原有数据增加一个Array类型的field:

    > db.user.updateOne({age:34},{$unset:{hobby:1} })
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > 
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34 }

    对age=34的数据添加hobby字段 列表

    > db.user.updateOne({age:34},{$set:{hobby:["羽毛球","篮球","足球"]} })
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > 
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球" ] }

    对age=34的数据的hobby列表添加一个桌球数据

    > db.user.updateOne({age:34},{$push:{hobby:'桌球' } } )
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球", "桌球" ] }

    $push 是在 Array(list) 的尾端加入一个新的元素  {$push : {"hobby" : "桌球"}}

    $pull:

     { $pull: { key: value } }

     有了$push 对Array列表类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array列表中的某一个元素

    例子:

    把age=34的数据的hobby列表里面桌球元素删除

    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球", "桌球" ] }
    
    > db.user.updateOne({age:34},{$pull:{hobby:'桌球' } } )
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球" ] }

     

    如果Array列表里面有多个桌球相同元素会怎么样?

    添加两个桌球元素

    > db.user.updateOne({age:34},{$push:{hobby:'桌球'} } )
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球", "桌球" ] }
    
    > db.user.updateOne({age:34},{$push:{hobby:'桌球'} } )
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球", "桌球", "桌球" ] }
     

    把列表所有"桌球"的元素都删除掉

    > db.user.updateOne({age:34},{$pull:{hobby:'桌球' } } )
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球" ] }


    得出了一个结论,只要满足条件,就会将Array列表中所有满足条件的数据全部清除掉

    修改列表里面元素的名字

    例子:

    修改age=34的数据,hobby里面的"足球"改为"网球"

    > db.user.updateOne({age:34,hobby:"足球"},{$set:{"hobby.$":"网球" } } )
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > 
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "网球" ] }

     了解MongoDB "$" 可以看这个帖子 MongoDB "$" 字符 下标位置

     

    $pop:

    指定删除Array列表中的第一个 或 最后一个 元素

    -1 代表第一个元素, 1 代表最后元素

    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "羽毛球", "篮球", "足球" ] }
    > 

    删除age=34 hobby 列表 第一个元素

    > db.user.updateOne({age:34},{$pop:{hobby:-1}})
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "篮球", "足球" ] }

    删除age=34 hobby 列表 最后一个元素

    > db.user.updateOne({age:34},{$pop:{hobby:1}})
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.user.find({age:34})
    { "_id" : ObjectId("5ca7a4c4219efd687462f968"), "id" : 4, "name" : "xiaogang", "age" : 34, "hobby" : [ "篮球" ] }
  • 相关阅读:
    「洛谷 NOIP 计划 2021」【学习1】降维技巧
    组合数取模 合集
    浅谈并查集
    四边形不等式优化 dp (doing)
    qbxt数学五一Day4
    qbxt五一数学Day3
    qbxt五一数学Day2
    qbxt五一数学Day1
    浅谈拉格朗日插值
    10-交换排序:冒泡排序
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/10701497.html
Copyright © 2011-2022 走看看