6,MongoDB 之 Array Object 的特殊操作

相比关系型数据库, 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的操作阶段就已经学习结束了.

原文地址:https://www.cnblogs.com/feifeifeisir/p/10279343.html

时间: 2024-11-05 21:39:03

6,MongoDB 之 Array Object 的特殊操作的相关文章

Mongodb for PHP教程之数据操作

Mongodb的常用操作 参看手册,php官方的http://us2.php.net/manual/en/mongo.manual.php 也可以参看mongodb官方的教程 数据库连接 ⑴默认格式 $m = new Mongo(); //这里采用默认连接本机的27017端口,当然你也可以连接远程主机如                   192.168.0.4:27017,如果端口是27017,端口可以省略 ⑵标准连接 $m = new Mongo("mongodb://${username}

IE Array Object Heap Spraying

Array Object Heap Spraying Jscript9中的Array对象是一个很有意思的东西,由于数组的便利性,我们可以用数组来做很多事情,比如修改数组长度来实现任意地址的读写.利用Array的vftable进行信息泄露等等.在CanSecWest 2014上ga1ois的讲题<The Art of Leaks – The Return of Heap Feng Shui>中提到了由于jscript9引擎中ArrayData的对齐问题,可以通过构造特定的Array来造成信息泄露

MongoDB update Array elements

本文记录如何更新MongoDB Collection 中的Array 中的元素.假设Collection中一条记录格式如下: 现要删除scores 数组中,"type" 为 "homework",较小的那个score.在上图中,较小的score为54.759... 根据MongoDB上的update用法如下: db.collection.update(query, update, options) 其中,query表示:更新的条件,update表示:待更新的内容,o

MongoDB中空间数据的存储和操作

本文使用官方C# Driver,实现在MongoDB中存储,查询空间数据(矢量) 空间数据的存储 本例中,从一个矢量文件(shapefile格式)中读取矢量要素空间信息以及属性表,并写入到MongoDB中去,其中读取shapefile文件以及将空间信息转成json的功能通过Ogr库实现 //打开MongoDB的Collection MongoDatabase db = server.GetDatabase("aa"); MongoCollection colSheng = db.Get

【转载】8天学通MongoDB——第三天 细说高级操作

今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样. <2> distinct 这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图. <3> group 在mongodb里面做group操作有点

C#中List&lt;object&gt;.Clear()方法和实例化new List&lt;object&gt;()操作的结果分析

    本文主要的目的是想简单的探讨一下C#中List针对内存的操作过程,以便以后遇到该种情况可以避免走进误区,内容非常简单,只是在此作为记录.能帮到人最好,帮不到就当给自己提个醒.C#将复杂的指针操作全都隐藏到后台去处理,以至于是我们很到看到C#的本质. C#中list<T> list=new List<T>();中new的过程是建立一块内存空间,是新建一个没有元素的空列表对象. C#中list.Clear()是把new之后的那块内存空间的内容清空,并不是删除这块内存空间,是清除

使用MyEclipse对MongoDB数据库 进行增删改查操作

前面写了一篇MongoDB的下载与安装,接下来此篇写的是MongoDB数据库在JAVA程序中的基本功能: 使用MyEclipse对MongoDB数据库进行增删改查操作 1.导入JAR包 使用了Spring3.0:此类包,可以上网查询"MongoDB相关JAR包" 2.创建一个Person实体类 源代码如下: public class Person(){ //属性 Private String id; //id Private String name; //name Private in

MongoDB中数组类型相关的操作

概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下MongoDB的数组的相关操作.关于数组的操作可以分成两类,一类是数组操作符,另一个是数组运算修饰符.  数组操作符 操作符 实现功能 $ 根据查询选择器定位要更新的文档 $push 添加值到数组中 $pushAll 添加数组到一个数组中.(将被$rach取代) $addToSet 添加值到数组中,重复了

Eigen 3.3.7 数组类(Array)和元素操作

数组类(Array)和元素操作 原文地址:http://eigen.tuxfamily.org/dox/group__TutorialArrayClass.html Array 类有什么用? Array 类提供了一个一般用途的数组,用于操作元素相关算法,就像 Matrix 专门用于实现线性代数算法.更具体一点,Array 提供了对元素进行操作的方法,这些操作大部分与线性代数算法无关.比如数组中每个元素都加一个常量或者两个同维数组对应元素相乘. Array 类型 Array 是一个模板类,和Mat