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" : [ "篮球" ] }
  • 相关阅读:
    PowerDesigner概念设计模型(CDM)中的3种实体关系
    基于Prototype 1.6.2 框架下的数据分页
    中国地区,北京54坐标系条带号的选
    C#中MessageBox的使用
    C#注册表的读,写,删除,查找 (转)
    C# Tostring() 格式大全 [转]
    Layer features in this layer set, ArcEngine图层标注源码 (转)
    判断点是否在多边形之内的方法
    C#导入Excel到Dataset和导出Excel到DataTable
    Server.MapPath方法的应用方法
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/10701497.html
Copyright © 2011-2022 走看看