MongoDB之Array Object的特殊操作
相比关系型数据库,Array[1,2,3,4,5]和Object{'name':'Wjs'}是MongoDB比较特殊的类型
db.Wjs.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.Wjs.update({"name":"骑士计划"},{$set:{"price.2":19300}})
我们用了引用下标(索引)的方法更改了数值 , "price.2"代指的是 Array 中第3个元素
2. 混合用法
如果 price.1 中小于19800 则加 200
db.Wjs.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.Wjs.updateMany({"name":"骑士计划","price":{$lt:19500}},{$inc:{"price.$":200}})
细心的同学已经发现了,只改了第一个,是的 $ 这个只储存一个下标,批量更改的话,
你只要把这个Array 拿出来,在程序里面改完,原方不动的放回去不就搞定了吗
二.Object 字典,但是这里更像是 JavaScript 中的 Object 对象
1.把other中 count 改为 199
db.Wjs.update({"name":"骑士计划"},{$set:{"other.count":199}})
对了就是在这个对象 打点儿 key 就可以更改数值了 , 要注意的是, 咱们用的 $set 进行修改的,那么就意味着,如果没有"other.count"这个field的话,他会自动创建
这个用法就到这里了,下面我们玩儿个更深的
2.混合用法
如果 count 小于 200 那么 加 10
db.Wjs.update({"name":"骑士计划","other.count":{$lt:200}},{$inc:{"other.count":10}})
这么玩儿完了之后,条件位置的打点儿调用,也尝试过了
Object的用法就这么多了
三. Array + Object 的用法
首先,我们要先建立一条 Document
{
"_id" : ObjectId("5b17de9d44280738145722b9"),
"name" : "骑士计划",
"price" : [
{
"start" : "1994.05.21",
"start_time" : "08:30",
"count" : 150
},
{
"start" : "1994.05.22",
"start_time" : "09:30",
"count" : 160
},
{
"start" : "1994.05.23",
"start_time" : "10:30",
"count" : 170
},
{
"start" : "1994.05.24",
"start_time" : "11:30",
"count" : 180
}
]
}
1.把count 大于 175 的field 加 15
混搭完成:
db.Wjs.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
2. 把 count 大于 180 的 start 改为 "1994.05.21"
db.Wjs.update({"price.count":{$gt:180}},{$set:{'price.$.start':"1994.05.21"}})
MongoDB之Array Object的特殊操作的更多相关文章
- MongoDB 之 Array Object 的特殊操作 MongoDB - 6
相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比较特殊的类型了 特殊在哪里呢?在他们的操作上又有什么需要注 ...
- 6,MongoDB 之 Array Object 的特殊操作
相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比较特殊的类型了 特殊在哪里呢?在他们的操作上又有什么需要注 ...
- python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)
一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...
- 科学计算 NumPy 与C语言对比 N-dimensional array ndarray 元素元素操作 计算正太分布分位数
w http://www.numpy.org/ NumPy is the fundamental package for scientific computing with Python. It co ...
- perl malformed JSON string, neither tag, array, object, number, string or atom, at character offset
[root@wx03 ~]# cat a17.pl use JSON qw/encode_json decode_json/ ; use Encode; my $data = [ { 'name' = ...
- OpenGL.Vertex Array Object (VAO).
OpenGL抛弃glEnable(),glColor(),glVertex(),glEnable()这一套流程的函数和管线以后,就需要一种新的方法来传递数据到Graphics Card来渲染几何体,我 ...
- MongoDB中数组类型相关的操作
概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下Mon ...
- Shader Object及Program操作API
Shader Object及Program操作API Program: 1. GLuint glCreateProgram( void );//创建 2. void glDeleteProgram( ...
- OpenGL.Vertex Array Object (VAO) [转]
http://www.cppblog.com/init/archive/2012/02/21/166098.html 一 OpenGL抛弃glEnable(),glColor(),glVertex() ...
随机推荐
- VS2017创建一个 ASP.NET Core2.0 应用,并搭建 MVC 框架
https://testerhome.com/topics/11747 1.使用最新版本的VS2017,并安装.NET Core2.0中相关开发工具 2.打开VS2017,点击文件-新建-项目,选 ...
- jsfl 生成flash 工具面板
利用flash组件的List做界面,先从flash中拖出List组件,然后删除.绑定Main类. package { import flash.display.Sprite; import flash ...
- SAFESEH 映像是不安全的
1.打开该项目的“属性页”对话框 2.然后单击“链接器”--“命令行”,出现如下界面 3.将 /SAFESEH:NO 复制到“其它选项(D)”框中,然后点击应用 返回VS2013,重新编译运行程序即可 ...
- keal
I remember the wonderful moment you appeared before me, like a fleeting vision, like a genius of pur ...
- Linux:使用读写锁使线程同步
基础与控制原语 读写锁 与互斥量类似,但读写锁允许更高的并行性.其特性为:写独占,读共享. 读写锁状态: 一把读写锁具备三种状态: 1. 读模式下加锁状态 (读锁) 2. 写模式下加锁 ...
- mybatis 获取insert返回的主键
在我们开发过程中,在插入数据到数据库时,很多时候都需要把其主键返回,这里就说一下mybatis是怎么获取的. 其中mysql和oracle是不同的做法,因为mysql本身就提供字段自增的属性,而ora ...
- PHP对redis操作详解
/*1.Connection*/$redis = new Redis();$redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1 ...
- 网络层——IP报文头介绍
IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节. ...
- C#自定义控件:如果定义控件的事件
我做了一个控件: 在控件上面添加了一个 richTextBox1 系统控件 我想要的效果时,如果点击我的控件,就执行 用户自定义的 控件的 onClick 事件 而控件的工作过程时,如果点击我的控件, ...
- iOS修改状态栏颜色
application.statusBarStyle = .LightContent // 在APPlication中设置全局状态栏颜色,为白色 application.statusBarHidden ...