JSON和MONGODB
JSON不止是一种交换数据的方式,也是一种存储数据的良好方式,实际上MONGODB并未使用JSON存储数据,而是使用由MONGODB团队开发的一种称为BSON的开放数据格式。

面向文档存储BSON
BSON是一个开放标准,BSON存储使用的空间比JSNO(CouchDB一个强大的面向文档数据库)多在相同版本情况下。

BSON的优势在于
1、处理数据比JSON快,消耗一定的存储空间,简单说BSON更方便浏览,遍历索引页非常快。
2、使用BSON容易将它数据快速转换为编程余元的原生数据格式
3、BSON也提供对JSON的一些扩展,通过BSON可以存储二进制数据,以及处理特定的数据类型,因此,BSON可以存储任何JSON文档,但有效的BSON文档可能不是有效的JSON

浏览数据库
use testDB //切换已有数据库或者创建新的数据库
查看可用的数据库和集合

show dbs //只会显示出已经存在的数据库

show collections //显示当前数据库中的所有集合

集合中插入数据
最常用的操作就是在集合中插入数据,所有数据都以BSON格式存储,插入数据可以先定义数据,然后使用insertOne函数将它们保存在集合中,或使用insert函数临时输入文档内容。

douctment=({"key1":"values"})
db.test.insertOne(douctment)
插入数据时,键名必须遵守如下规则:
$字符不能是键名的第一个字符
圆点[.]不能出现在键中
名称_id被保留使用
集合的名称不能超过128个字符
空字符串("")不能用作集合名称
集合名必须以字母或下划线开头
集合名SYSTEM被MONGDB保留,不能使用
集合名不能包含null字符"\0"

全部数据查询
db.testDB.find() //结果显示其中的所有文档

获取特定类型的文档
db.testDB.find({"key1":"values"})
获取values相关的数据标题,忽略其他

db.testDB.find({"key1":"values"},{"Tilte":1})
使用函数sort、limit和skip

db.testDB.find().sort({"Tilte":1}) //按键的结果进行升序,若-1为降序
db.testDB.find().limit(10) //取文档前N个结果数目
db.testDB.find().skip(20) //跳过文档的前N个数据

组合使用这些函数
db.testDB.find().sort({"Tilte":1}).limit(10).skip(10)

在MONGODB中使用查询时,还需要注意一些额外的概念和特性,包括固定集合、自然顺序和$natural

自然顺序:是数据库中结合的原生排序方法,所以如果在查询集合中的文档时,如果没有显示指定排序顺序,结果将默认按照前向自然顺序返回。

固定集合:是数据库的一种集合,它的自然顺序保证与文档插入的顺序一致,保证自然顺序一直与文档插入顺序一致,另一优点是集合的大小固定,最老的数据将被删除,最新的数据将被添加到末端,保证自然顺序与文档插入的顺序一致

固定集合必须使用createCollection函数,如创建名为auth的固定集合
db.createCollection("auth":{capped:true,size:20480})
可以使用max限制固定集合中的文档数量
db.createCollection("auth":{capped:true,size:20480,max:100})
$natural:鉴于固定集合保证了自然顺序与插入顺序一致,查询时不需要再使用任何特殊的参数、任何其他特殊的命令或函数,如查找最近的10条数据
db.testDB.find().sort({$natural:-1}).limit(10)

查看集合的大小
db.testDB.stats()
获取单个文档
db.testDB.findOne()
使用聚集命名
count()函数返回文档的数目
db.testDB.count() //指定集合中的文档数目
执行额外的过滤统计
db.testDB.find({"key1":"values"},{"Tilte":1}).count() //count()函数默认将忽略skip()或limit()参数,若不想被忽略需要使用count(true)
db.testDB.find({"key1":"values"},{"Tilte":1}).limit(10).count(true)
使用distinct函数获取唯一值
db.testDB.distinct({"Tilte"})
将结果分组group()
该命令目的是返回一个已分组元素的数组,函数group()接受3个参数:key,initial和reduce,但在分片环境中无法正常工作
参数key指定希望使用哪个键对结果进行分组。
参数initial允许为每个已分组的结果提供基数(元素开始开始统计的起始基数),如果希望返回指定的数字,参数默认为0
参数reduce把所有类似的条目分组在一起,它接受2个参数:items和pre
db.testDB.group(
key:{"Tilte":true},
initial:{Total:0},
reduct:function(items,pre){
prev.Total+=1
}
)

使用条件操作符
$gt大于参数
db.testDB.find({"key1":{$gt:2000}})
$gte大于或等于 $lt小于 $lte小于等于 $ne 不等于
指定一个匹配的数组
db.testDB.find({"key1":{$in:[1,2,3,4]}}) //类似的又$nin
匹配文档所有属性$all
db.testDB.find({"key1":{$all:[1,2,3,4]}})
在文档中搜索多个表达
db.testDB.find({$or:[{"key1":"values1"},{"key2":"values2"}]}) //$nor
使用$slice获取文档
db.testDB.find({"key1":"values1"},{"Cast":{$slice:3}}) //获取前3项,负数为后N个
类似LIMT n,m
搜索奇数和偶数$MOD
db.testDB.find({"key1":"values1"},{"Cast":{$mod:[2,0]}})
使用$size过滤结果:过滤出文档中数组大小
db.testDB.find({"key1":{$size:2}})
返回含有特定字段的对象:$EXISTS (全表扫描,不能使用索引)
db.testDB.find({"key1":{$exists:true}})
基于bson类型匹配结果:$type可以基于BSON类型匹配结果:
db.testDB.find({"key1":{$type:3}})
匹配完整的数组 $elemMatch操作符

使用正则表达式
db.testDB.find({"key1":/^Sharesoe*/i})

更新数据
使用update()更新操作,该函数接受3个主要参数:criteria、objNew和options
参数criteria可用于指定一个查询
参数objNew指定更新信息
参数options用于指定更新文档时的选项,有upsert和multi,upsert有更新的就更新无更新就就创建,multi可以指定是否应该更新所有匹配的文档或只更新第一个文档
db.testDB.updateOne({"key1":"values"},{"Tilte":1},{upsert:true}) //可以使用save()命令实现upsert
db.testDB.save({"key1":"values"},{"Tilte":1})
##此更新会导致多余的key-value被删除
使用$inc增加值
db.testDB.updateOne({"key1":"values"},{$inc:{"Tilte":5}})
更新指定的值
db.testDB.updateOne({"key1":"values"},{$set:{"Tilte":"sharesoe.com"})
删除指定字段
db.testDB.updateOne({"key1":"values"},{$unset:{"Tilte":1})
在指定字段中添加某个值$push,或多个值用$each
db.testDB.updateOne({"key1":"values"},{$push:{"Tilte2":"haha"}})
db.testDB.updateOne({"key1":"values"},{$push:{"Tilte2":{$each:["haha",1,2,3]}}})
数组中添加数据
db.testDB.updateOne({"key1":"values"},{$addToSet:{"Tilte2":{$each:["haha",1,2,3]}}})
数组中删除元素
db.testDB.updateOne({"key1":"values"},{$pop:{"Tilte2":1}}) //正数是最后一个元素
删除数组中指定值、多个值
db.testDB.save({"key1":"values"},{$pull:{"Tilte2":"haha"}}})
db.testDB.updateOne({"key1":"values"},{$pullAll:{"Tilte2":["haha",1,2,3]}}})

批处理数据
MONGODB数据的批处理分为有序处理和无序,有序处理数据过程发生错误后就停止剩下数据的写入,无序操作以并行方式处理,若错误会执行其他的数据
有序实现
var bulk=initializeOrderBulkOp() //初始化有序列表
插入有序列表bulk,最后执行execute()
bulk.insertOne(xx)
bulk.execute()
评估输出:执行execute()命令后,就能够审查执行写入操作,评估是否成功写入了所有数据,通过getOperations()
bulk.getOperations()
batchTYPE 1 insert 2 update 3 remove
重命名集合
db.testDB.renameCollection("newname")
删除数据一条或多条
db.newname.deleteOne({"key1":"values"}) //删除匹配一个文档
db.newname.deleteMany({})
删除集合的所有文档
db.newname.drop() //removed
删除集合
db.dropDatabase()

Mongodb大数据语法大全的更多相关文章

  1. MongoDB 大数据技术之mongodb中在嵌套子文档的文档上面建立索引

    一.给collection objectid赋自定义的值 MongoDB Enterprise > db.testid.insert({_id:{imsi:"4567890123&qu ...

  2. MongoDB update数据语法【转】

    在前面的文章“mongodb 查询的语法”里,我介绍了Mongodb的常用查询语法,Mongodb的update操作也有点复杂,我结合自己的使用经验,在这里介绍一下,给用mongodb的朋友看看,也方 ...

  3. ECOS-Ecstore mongodb大数据 读写效率优化

    转自同功BBS 拆表存取kv <?php /* 经过拆变优化的ECStore mongodb 类 base/lib/kvstore/mongodb.php*/ class base_kvstor ...

  4. MongoDB大数据高并发读写性能测试报告

    服务器大小: 单节点部署,磁盘1T,内存128G 并发导入规模: 1,多线程并发导入csv文件 2,csv文件分1万.10万.100万.200万行记录4种大小 3,每个csv对应一个collectio ...

  5. 海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践

    1. 概述 数据服务(https://ds-cn-shanghai.data.aliyun.com)  是DataWorks产品家族的一员,提供了快速将数据表生成API的能力,通过可视化的向导,一分钟 ...

  6. 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践

    1. 概述 数据服务(https://ds-cn-shanghai.data.aliyun.com) 是DataWorks产品家族的一员,提供了快速将数据表生成API的能力,通过可视化的向导,一分钟“ ...

  7. 【mongoDB高级篇②】大数据聚集运算之mapReduce(映射化简)

    简述 mapReduce从字面上来理解就是两个过程:map映射以及reduce化简.是一种比较先进的大数据处理方法,其难度不高,从性能上来说属于比较暴力的(通过N台服务器同时来计算),但相较于grou ...

  8. 大数据项目实践:基于hadoop+spark+mongodb+mysql+c#开发医院临床知识库系统

    一.前言 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(HIS ...

  9. 大数据存储:MongoDB实战指南——常见问题解答

    锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...

随机推荐

  1. LayIM.AspNetCore Middleware 开发日记(六)嵌入资源的使用,layim.config的封装

    前言 距离上一篇博客竟然已经10多天了...工作上的事,个人原因,种种吧.不多说废话,本文将会重点介绍layim的入口配置. LayIM配置 其实在开发者文档里面已经描述的很清楚了.除了几个重要的接口 ...

  2. Android攻城狮学习笔记—入门篇一

    第一章 搭建Android开发环境 1.1 环境组成 JDK(Java Development Kit) Eclipse Android SDK(Software Development Kit) A ...

  3. 双显示器N卡安装ubuntu驱动以及解决办法

    之前我是打算在win下面结合虚拟机开发前后端,今天仔细想了一下,不是很靠谱,后端调试太困难了.可能的方案就是Netbeans远程开发的方式,以前我试过,调试起来也是非常的麻烦.于是果断下载个ubunt ...

  4. ORA-00600:internal error code,arguments:[keltnfy-idmlnit],[46],[1],[],[],[],[],[]

    如图:在DBCA进行到3%时.报错 由于/etc/hosts与/etc/sysconfig/network不正确应,所以报错 [root@ocm2 ~]# cat /etc/hosts # Do no ...

  5. linux 进程间通信方式

    管道: 它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信消息队列: 用于运行于同一台机器上的进程间通信,它和管道很相似,是一个在系统内核中 ...

  6. vue.js数组追加合并与对象追加合并的

    今天在做懒加载的时候遇到的问题,在网上搜索找到的答案不是很清晰,就来写一下,方便以后使用. 直接上图吧 官方连接:https://cn.vuejs.org/v2/guide/reactivity.ht ...

  7. 并发编程(四)------并发quene

    在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue接口! Con ...

  8. iOS:UITableView相关(18-10-20更)

    UITableView用得较多,遇到的情况也较多,单独记录一篇. 一.零散的技巧 二.取cell 三.cell高度 四.导航栏.TableView常见问题相关 五.自定义左滑删除按钮图片 六.仅做了解 ...

  9. No active profile set, falling back to default profiles: default

    No active profile set, falling back to default profiles: default 这个错误是由于idea没有设置默认启动环境,设置即可

  10. vue keep-alive 不生效 以及前进 后退 对数据刷新和保留缓存操作

    https://blog.csdn.net/sinat_37255207/article/details/89373825 因为项目Vue router 连续嵌套了好几层 首先检查keep-alive ...