MongoDB 之 Array Object 的特殊操作

相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'lin' } 是MongoDB 比较特殊的类型了

特殊在哪里呢?在他们的操作上又有什么需要注意的呢?

 

创建数据

那我们先建立一条数据,包含 Array 和 Object 类型

db.table1.insertOne({"name":"ming","age":18,"info":{"tizhong":130,"gao":170},"hobby":[1,2,3,4]})

{
    "_id" : ObjectId("5c220d658db659c8088a8d95"),
    "name" : "ming",
    "age" : 18,
    "info" : {
        "tizhong" : 130,
        "gao" : 170
    },
    "hobby" : [
        1,
        2,
        3,
        4
    ]
}

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

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

Array操作

1..修改数据中hobby下标为2 的内容为 5

db.table1.update({"hobby":2},{$set:{"hobby.$":5}})

2.混合用法

如果 hobby.3 中小于5 则hobby.1加 1
db.table1.update({"name":"ming","hobby.3":{$lt:5}},{$inc:{"hobby.1":1}})

复习一下:"hobby.3":{$lt:5} 是查找 price.3 小于 5

复习两下:{$inc:{"hobby.1":1}} 是什么啊? hobby.1 拿出来 加上 1 之后 再存进去   ( ) 

 上节课我们也学习了 $ 的用法,现在我们混搭 $ 再做一个练习

再来一个:

hobby.2小于4 就给他加1
db.table1.update({"name":"ming","hobby.2":{$lt:4}},{$inc:{"hobby.2":1}})

我们把 price 小于 6  的 自动补上 1

db.table1.updateMany({"name":"ming","hobby":{$lt:4}},{$inc:{"hobby.$":1}})

细心的同学已经发现了,只改了第一个,是的 $ 这个只储存一个下标,批量更改的话怎么做?

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

Object 操作

1. 数据中 info.tizhong 的130 修改为125

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

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

2.

2.混合用法

如果 gao 小于 175 那么 加 5

db.table1.update({"name":"ming","info.gao":{$lt:175}},{$inc:{"info.gao":5}})

 

 Array + Object 操作

首先,我们要先建立一条 Documen

db.table1.insert({"class":"甲班","student":[{"name":1,"age":18},{"naem":2,"age":19}]}))

{
    "_id" : ObjectId("5c22231f8db659c8088a8d9a"),
    "class" : "甲班",
    "student" : [
        {
            "name" : 1,
            "age" : 18
        },
        {
            "naem" : 2,
            "age" : 19
        }
    ]
}

1.把age 大于 18 的field  加 1

db.table1.update({"student.age":{$gt:18}},{$inc:{"student.$.age":1}})

分析一下我们的代码:

db.table1.update({"student.age":{$gt:18}},{$inc:{"student.$.age":1}})

 {"student.age":{$gt:18}}     student 是个数组,怎么直接用 点 age 呢   这里是指 student 打点儿 就是从内部的Object 中找到 age 大于 18 的结果 

 {$inc:{"student.$.age":1}    这里就比较好理解了,student 里面第  $  (大于18的第一个) 个元素中 age 增加 1

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

2. 把age 大于 18 的name  改为  我改名字了

发现 新添加了个name    原来的是不小心写成naem  ,    回到原知识点:set 不存在的字段 获得新的字段

再次修改

到此为止我们MongoDB的操作阶段就已经学习结束了.

 

posted @ 2018-12-25 20:45  洛丶丶丶  阅读(724)  评论(0编辑  收藏  举报