相比关系型数据库, 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,
18800
],
"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日"

不做过多解释了,没学会的翻回去看吧

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

mongo复杂操作的更多相关文章

  1. 2. MongoDB基本操作 —— 用Mongo.exe操作数据库增删改查

    一.开篇 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象 ...

  2. mongo(删除操作)

    在使用MongoDB的时候,经常会用到MongoDB的删除操作,以下是我在使用MongoDB删除操作的总结 首先是删除用户: db.removeUser("用户名") 其次是删除数 ...

  3. mongo 高级操作

    聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 管道 管道在Unix和 ...

  4. Mongo——C#操作

    自己练手写了一个MongoDb的泛型类,顺便把一些常用命令整理了一下,做个记录: /// <summary> /// Mongo操作类. /// </summary> /// ...

  5. mongo 数据库操作

    启动和关闭数据库 启动 # mongodb 默认使用执行 mongod 命令所处的盘的根目录下  /data/db 作为自己的数据存储目录 #   所以在第一次执行该命令之前先自己动手新建一个  /d ...

  6. laraver mongo 查询操作

    1,mongo 不支持特殊where条件(&,|) 2,mongo 可以连接mysql的表查询,但不支持连表的where查询

  7. Mongo常用操作

    设置登陆验证 进入Mongo添加用户    db.addUser('root','123456') 编辑Mongo配置文件  vi /etc/mongod.conf   找到#auth = true ...

  8. Mongo 常用操作

    1.查询 [基本形式]db.col.find().pretty():pretty() 方法以格式化的方式来显示所有文档. [获取记录条数]:db.users.find().count(); [读取指定 ...

  9. Mongo数据库操作/数据库版本号

    第一步,找到mongodb安装目录第二步,从命令行进入mongodb安装目录下的bin目录 附:http://www.runoob.com/mongodb/mongodb-create-databas ...

随机推荐

  1. mysql自增ID过大修改方法

    执行sql: alter table table_name AUTO_INCREMENT=100

  2. JDK(五)JDK1.8源码分析【集合】HashMap

    本文转载自无始无终,原文连接 HashMap 在 JDK 1.8 后新增的红黑树结构 传统 HashMap 的缺点 JDK 1.8 以前 HashMap 的实现是 数组+链表,即使哈希函数取得再好,也 ...

  3. 【题解】洛谷P1273 有线电视网(树上分组背包)

    次元传送门:洛谷P1273 思路 一开始想的是普通树形DP 但是好像实现不大好 观摩了一下题解 是树上分组背包 设f[i][j]为以i为根的子树中取j个客户得到的总价值 我们可以以i为根有j组 在每一 ...

  4. 免费申请 WebStorm 使用许可 - free JetBrains Open Source license(s)

    闲聊 步入前端切图仔行列的我曾多次纠结过「到底使用哪种编辑器写前端好用?」这样的问题,前前后后尝试过 Dreamweaver .HBuilder .Sublime Text .Atom 和现在主要使用 ...

  5. 浅析中国剩余定理(从CRT到EXCRT))

    前置知识 1. a%b=d,c%b=e, 则(a+c)%b=(d+e)%b(正确性在此不加证明) 2. a%b=1,则(d\(\times\)a)%b=d%b(正确性在此不加证明) 下面先看一道题(改 ...

  6. 【Linux】日志分析及管理

    日志的作用   用于记录系统.程序运行中发生的各种事件   eg: [root@localhost ~]# yum install -y httpd [root@localhost ~]# tail ...

  7. 小白的Unity5之路(一)

    Player移动: public float speed = 6f; Vector3 movement; Rigidbody playerRididbody; void FixedUpdate () ...

  8. less的编译

    less其实也文本类型,跟txt的性质差不多 less有自己语法(变量,函数,作用域.Mixin混入),使css样式更加方便,有逻辑性,提高可维护性,减少重复性代码的冗余. 把less编译成css文件 ...

  9. HTML标签速记整理W3C

    标题 <h1>段落<p>链接< href="">图像<img src="">自关闭元素,不需要结束标记换行标志& ...

  10. hadoop docker集群搭建

    获取镜像 #本机内 docker pull ubuntu:16.04 编排镜像 启动一个容器 #本机内 docker run -i -t --name master ubuntu:16.04 在容器内 ...