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. Appium基础篇(一)——启动emulator

    1. Appium API文档:链接参考 http://appium.io/slate/cn/v/?ruby#appium-介绍. 2. Appium 安装篇:http://www.cnblogs.c ...

  2. 【转】Linux下RabbitMQ服务器搭建(单实例)

    阅读目录 系统环境 安装步骤 注意事项 参考资料 回到顶部 系统环境 操作系统:CentOS6.9 erlang:OTP 19.3 rabbitmq:rabbitmq-server 3.6.12 回到 ...

  3. PAT——1019. 数字黑洞

    给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的6174 ...

  4. Linux 嵌入式 开发环境 交叉编译安装

    1.安装 Ubuntu 系统 安装完毕,系统 提示 重启,这个时候 请拔掉U盘,进行重启 OK. 2.安装 NFS 服务 3.安装 openssh服务 4.开启openSSH服务 5.就可以使用 Wi ...

  5. HDU 3695 Computer Virus on Planet Pandora (AC自己主动机)

    题意:有n种病毒序列(字符串),一个模式串,问这个字符串包括几种病毒. 包括相反的病毒也算.字符串中[qx]表示有q个x字符.具体见案列. 0 < q <= 5,000,000尽然不会超, ...

  6. Java中的集合框架-Collection(一)

    一,Collection接口 在日常的开发工作中,我们经常使用数组,但是数组是有很多的局限性的,比如:数组大小固定后不可修改,只能存储基本类型的值等等. 基于数组的这些局限性,Java框架就产生了用于 ...

  7. iOS中怎么判断可变和不可变的坑(更正版)

    iOS中怎么判断可变和不可变的坑 怎么判断NSString和NSMutableString呢 看题 BOOL result = [" isKindOfClass:[NSMutableStri ...

  8. javacript window对象

    Window -- 代表浏览器中一个打开的窗口: 对象属性 window //窗口自身 window.self //引用本窗户window=window.self window.name //为窗口命 ...

  9. Google Cloud Platform 续

    Google Cloud Platform 创建新实例 地区:australia-southeast1-a 机器类型:1个vCPU n1-standard-1 系统:Ubuntu 16.04 LTS ...

  10. fail2ban 防暴力破解总结

    公司服务器安全问题一直是个令人头疼的问题,许多运维的小伙伴一直在用脚本来监控服务器登录状态,然而脚本编写比较麻烦,今天就给大家推荐一款小而精致的防暴力破解工具 fail2ban ,他可以监控系统日志, ...