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" : [
,
,
,
],
"other" : {
"start" : "2018年8月1日",
"start_time" : "08:30",
"count" :
}
}
针对这条数据我们进行一系列的操作,并讲解使用方式
一.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" :
},
{
"start" : "2018年8月2日",
"start_time" : "09:30",
"count" :
},
{
"start" : "2018年8月3日",
"start_time" : "10:30",
"count" :
},
{
"start" : "2018年8月4日",
"start_time" : "11:30",
"count" :
}
]
}
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的特殊操作的更多相关文章
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- MongoDB的CRUD操作
1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- mongodb的常用操作
对于nosql之前工作中有用到bekerlydb,最近开始了解mongodb,先简单写下mongodb的一些常用操作,当是个总结: 1.mongodb使用数据库(database)和集合(collec ...
- MongoDB基本命令行操作
1. 连接MongoDB: Mongodb://username:password@hostname/dbname 2. 创建数据库: use dbname:如果数据库不存在则创建数据库,否则切换到指 ...
- mongoDB之集合操作
mongoDB之集合操作 mongoDB中的集合相当于mysql中的表. mongoDB中集合的创建: 第一种方式:不限制集合大小 db.createCollection("集合名称&q ...
- MongoDB数据库简单操作
之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...
- Yii2的mongodb的聚合操作
最近项目使用到mongodb的聚合操作,但是yii文档中对这方面资料较少,记录下 $where['created_time'] = ['$gt' => "$start_date_str ...
- NOSQL -- Mongodb的简单操作与使用(win10)
NOSQL -- Mongodb的简单操作与使用(wins) MongoDB 创建集合: db.createCollection(name, options) use huhu db.createCo ...
随机推荐
- TCP 首部格式
<图解TCP/IP> 6.7 TCP的首部格式 TCP中没有表示包长度和数据长度的字段.可由IP层获知TCP的包长由TCP的包长可知数据的长度. 源端口号:表示发送端端口号,字段长16位 ...
- excel 导入导出测试点
目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...
- Android Studio编译报错Could not reserve enough space for 2097152KB object heap解决方法
环境变量中添加
- linux系统高级命令进阶
输出重定向 >:覆盖文件内容 echo "123" > test:把原来的内容覆盖 echo "123" >> test:把原来的存在( ...
- 【Linux开发】IO streaming DMA buffer importing
http://linuxtv.org/downloads/v4l-dvb-apis/dmabuf.html I/O流 (DMA缓存引用) 这是一个实验性接口,将来可能发生改变 DMABUF框架提供了在 ...
- 大数据平台CentOS7+CDH5.12.1集群搭建
1.CM(Cloudera Manager)介绍 1.1 简介 Cloudera Manager是一个拥有集群自动化安装.中心化管理.集群监控.报警功能的一个工具,使得安装集群从几天的时间缩短在几个小 ...
- java虚拟机学习总结之GC回收算法与GC收集器
GC回收算法 1.标记清除算法分为标记阶段和清除阶段标记阶段:通过特定的判断方式找出无用的对象实例并将其标记清除阶段:将已标记的对象所占用的内存回收缺点:运行多次以后容易产生空间碎片,当需要一整段连续 ...
- C语言黑与白问题
问题描述: 有A.B.C.D.E这5个人,每个人额头上都帖了一张黑或白的纸.5人对坐,每 个人都可以看到其他人额头上纸的颜色.5人相互观察后: A说:“我看见有3人额头上贴的是白纸,1人额头上贴的是黑 ...
- 跟风Manacher算法整理
这是上上周天机房一位神仙讲的,\(gu\)了这么久才来整理\(w\),神仙讲的基本思路已经全都忘记了,幸好的是神仙写了\(blog\),吹爆原博浅谈\(Manacher\)算法,以及原博神仙\(ych ...
- PC端微信防撤回功能分析
1.打开PC端微信的安装目录,有一个WeChatWin.dll文件,微信的所有功能基本上都在这个文件中了 2.OD打开,搜索字符串revokemsg(撤回消息,掌握一门外语是多么的重要啊!!!),在所 ...