博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB之Array Object的特殊操作
阅读量:5146 次
发布时间:2019-06-13

本文共 2482 字,大约阅读时间需要 8 分钟。

相比关系型数据库,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"}})

 

转载于:https://www.cnblogs.com/wjs521/p/10180421.html

你可能感兴趣的文章
net面试宝典
查看>>
Moto Defy刷机卡M无法进入RSD状态解决方法
查看>>
ACM程序设计选修课——1049: Efface Numbers(贪心)
查看>>
NBUT 1457 Sona(莫队算法+离散化)
查看>>
PAT (Basic Level) Practise 1040 有几个PAT(DP)
查看>>
WinCE5.0移植DM9000之DM9000寄存器功能详细介绍--转载
查看>>
python 将字符串转换为字典
查看>>
100个著名初等数学问题
查看>>
PhoneGap开发不可或缺的五件装备
查看>>
VirtualBox安装Ubuntu搭建js环境的注意事项
查看>>
标题:如何使用ShareSDK实现Cocos2d-x的Android/iOS分享与授权
查看>>
Class.getResource和ClassLoader.getResource的区别分析
查看>>
浮躁的心
查看>>
excel之VLOOKUP函数的使用
查看>>
Caused by: java.lang.IllegalArgumentException: Malformed \uxxxx encoding.
查看>>
How to click on a point on an HTML5 canvas in Python selenium webdriver
查看>>
(10)函数参数
查看>>
scrapy项目部署
查看>>
吴裕雄 python 神经网络——TensorFlow 图像预处理完整样例
查看>>
sitemesh布局
查看>>