• MongoDB 之 Array Object 的特殊操作 MongoDB


    相比关系型数据库, 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}})

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

    好的,这条数据已经完成了

    针对这条数据我们进行一系列的操作,并讲解使用方式

    一.Array 小秀一波

    1.把price 中 19000 改为 19300

    db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"price.2":19300}})

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

    2. 混合用法

    如果 price.1 中小于19800 则加 200

    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

    db.Oldboy.updateMany({"name":"路飞学城-骑士计划","price":{$lt:19500}},{$inc:{"price.$":200}})

    细心的同学已经发现了,只改了第一个,是的 $ 这个只储存一个下标,批量更改的话,嘻嘻嘻嘻截至2017年1月1日,MongoDB没有这个功能

    你只要把这个Array 拿出来,在程序里面改完,原方不动的放回去不就搞定了吗

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

    1.把other中 count 改为 199

    db.Oldboy.update({"name":"路飞学城-骑士计划"},{$set:{"other.count":199}})

    对了就是在这个对象 打点儿 key 就可以更改数值了 , 要注意的是, 咱们用的 $set 进行修改的,那么就意味着,如果没有"other.count"这个field的话,他会自动创建

    这个用法就到这里了,下面我们玩儿个更深的

    2.混合用法

    如果 count 小于 200 那么 加 10

    这么玩儿完了之后,条件位置的打点儿调用,也尝试过了

    Object的用法就这么多了

    三. Array + Object 的用法 告诉你们,这个老High了

    首先,我们要先建立一条 Document 嘻嘻嘻嘻嘻

    {
        "_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
            }
        ]
    }

    insert的代码要自己写哦,学完一直没怎么练习过,Document添加完成之后

    1.把count 大于 175 的field  加 15

    混搭完成:

    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

    我们要学会举一反三 $set 如果忘了, 就再来一个例子吧

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

  • 相关阅读:
    vue.js3: 旋转图片并保存(vue@3.2.37)
    vue.js3: 图片的反色/灰度(黑白)/褐色并保存(vue@3.2.37)
    chrome:配置console控制台显示时间戳(chrome 105.0.5195.102)
    vue.js3:图片镜像(翻转)并保存(vue@3.2.37)
    vue.js3: 多张图片合并(vue@3.2.37)
    javascript:null和undefined的区别(chrome 104.0.5112.101)
    文本多行替换
    FreeRTOS 多核通信MessageBuffer
    IAR Visual State 状态机 代码生成
    C/C++编译器支持 __FILE_NAME__ 获取文件名,不显示文件路径
  • 原文地址:https://www.cnblogs.com/129TL/p/10278887.html
Copyright © 2020-2023  润新知