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的操作阶段就已经学习结束了.