美文网首页
MongoDB 之 Array Object 的特殊操作 201

MongoDB 之 Array Object 的特殊操作 201

作者: Mr_Du_Biao | 来源:发表于2018-10-17 21:24 被阅读0次

相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比较特殊的类型了
那我们先建立一条数据,包含 Array 和 Object 类型

  • db.Oldboy.insert({"name":"路飞学城-骑士计划","price":[19800,19500,19000,18800],"other":{"start":"2018年8月1日","start_time":"08:30","count":150}}) image.png
{
    "_id" : ObjectId("5b17d01a49bf137b585df891"),
    "name" : "路飞学城-骑士计划",
    "price" : [
        19800,
        19500,
        19000,
    ],
    "other" : {
        "start" : "2018年8月1日",
        "start_time" : "08:30",
        "count" : 150
    }
}

一.Array

  • 1.把price 中 19000 改为 19300 image.png
    • db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"price.2":19300}})

    • 我们用了引用下标的方法更改了数值 , "price.2"代指的是 Array 中第3个元素

  • 2. 混合用法
    • 如果 price.1 中小于19800 则加 200 image.png
    • db.Oldboy.update({"name":"路飞学城-骑士计划","price.1":{$lt:19800}},{$inc:{"price.1":200}})
    • 复习一下:"price.1":{$lt:19800} 是查找 price.1 小于 19800
    • 复习两下:{$inc:{"price.1":200}} 是什么啊? price.1 拿出来 加上 200 之后 再存进去
  • $ 的用法,现在我们混搭 $ 再做一个练习
    • 我们把 price 小于 19500 的 自动补上 200 image.png
    • db.Oldboy.updateMany({"name":"路飞学城-骑士计划","price":{$lt:19500}},{inc:{"price.":200}})
    • 细心的同学已经发现了,只改了第一个,是的 $ 这个只储存一个下标,批量更改的话,嘻嘻嘻嘻截至2017年1月1日,MongoDB没有这个功能

二.Object 字典总玩儿过吧,但是这里更像是 JavaScript 中的 Object 对象

  • 1.把other中 count 改为 199 image.png
    • db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"other.count":199}})
    • 对了就是在这个对象 打点儿 key 就可以更改数值了 , 要注意的是, 咱们用的 $set 进行修改的,那么就意味着,如果没有"other.count"这个field的话,他会自动创建
  • 2.混合用法
    • 如果 count 小于 200 那么 加 10 image.png

三. Array + Object 的用法

  • 首先,我们要先建立一条 Document image.png
{
    "_id" : ObjectId("5b17de9d44280738145722b9"),
    "name" : "路飞学城-骑士计划",
    "price" : [
        {
            "start" : "2018年8月1日",
            "start_time" : "08:30",
            "count" : 150
        },
        {
            "start" : "2018年8月2日",
            "start_time" : "09:30",
            "count" : 160
        },
        {
            "start" : "2018年8月3日",
            "start_time" : "10:30",
            "count" : 170
        },
        {
            "start" : "2018年8月4日",
            "start_time" : "11:30",
            "count" : 180
        }
    ]
}
  • 1.把count 大于 175 的field 加 15 image.png
  • db.Oldboy.update({"price.count":{$gt:175}},{$inc:{"price.$.count":15}})

  • 分析一下我们的代码:

  • {"price.count":{$gt:175}}, price 明明是个 Array 啊 怎么就直接 打点儿 count 了呢 这里要知道price 打点儿 就是从内部的Object 中找到 count 小于 175 的结果

  • {$inc:{"price.$.count":15}} , 这里就比较好理解了,price里面第 $ (大于175的第一个) 个元素中 count 增加 15

    1. 把 count 大于 180 的 start 改为 "2018年8月10日" image.png

相关文章

网友评论

      本文标题:MongoDB 之 Array Object 的特殊操作 201

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