Mongodb大数据语法大全

JSON和MONGODB

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

面向文档存储BSON

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

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()

时间: 2024-08-05 00:34:33

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

MONGODB大数据运维管理

数据库管理 备份MONGODB服务器 执行mongodump    //默认使用本地连接127及端口连接本地数据库 数据库恢复到备份之前的状态: mongorestore --drop ##--drop选项告诉mongorestore工具,在恢复集合之前先丢弃现有的数据,如果不使用该选项,被恢复的数据将被追加到每个集合的尾部,导致数据的重复 备份单个数据库 mongodump -d  database_name  -c  post ##备份指定库下集合 --help 恢复单个数据库 mongor

优化ECStore mongodb大数据 读写效率

转自同功BBS 拆表存取kv <?php /* 经过拆变优化的ECStore mongodb 类 base/lib/kvstore/mongodb.php*/ class base_kvstore_mongodb extends base_kvstore_abstract implements base_interface_kvstore_base { static private $_mongodb = null; function __construct($prefix) { $prefix

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

服务器大小: 单节点部署,磁盘1T,内存128G 并发导入规模: 1,多线程并发导入csv文件 2,csv文件分1万.10万.100万.200万行记录4种大小 3,每个csv对应一个collection 并发查询规模 1,多线程并发查询不同collection 2,分全表查询和局部查询两种场景 性能测试结果: 导入性能 csv文件大小(万行记录) 并发线程数 导入耗时(秒)  累计导入csv文件数量 200 1 60 5000 200 10 105 5000 200 40 330(峰值内存110

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

概述数据服务(https://ds-cn-shanghai.data.aliyun.com) 是DataWorks产品家族的一员,提供了快速将数据表生成API的能力,通过可视化的向导,一分钟"零代码"就可以生成API,让API开发从未有过如此便捷!同时支持自定义API查询SQL功能,对您的个性化复杂查询逻辑支持照样不在话下. DataWorks数据服务提供HTTP API服务,采用Serverless架构,您只需关注API本身的查询逻辑,无需关心运行环境等基础设施,零运维成本. Dat

大数据工具千千万,到底谁才是最强王者?

外面有成千上万的大数据工具.它们都承诺可以为你节省时间和资金,并帮助发掘之前从来见过的业务洞察力.虽然确实如此,可是面对那么多的选择,想理清这么多的工具谈何容易. 哪一种工具适合你的技能组合?哪一种工具适合你的项目? 为了替你节省一点时间,并帮助你首次选对工具,我们列出了我们青睐的几款数据工具,涉及数据提取.存储.清理.挖掘.可视化.分析和整合等领域. 数据存储和管理 如果你准备处理大数据,就要考虑该如何存储大数据.大数据得到"大"这个名号,一方面在于,大数据太庞大了,传统系统处理不了

GDAL2.1增加支持Mongodb存储空间大数据

      随着空间数据越来越渗透到社会生活的各个方面,大数据提供服务的能力有待增强.如全国地理国情普查数据,仅空间矢量数据一个省数据量在30GB左右,影像更在TB级,全国数据量就更不得了,传统的集中存储模式如果在几个部门间使用还凑合,在十几个部门,成千上万次服务请求并发的情况下,难以为继.为此尽早使用互联网思维,采用集群并发处理的模式处理空间数据,提供必要的统计分析为当务之急.为此本文探讨了如何使用Mongodb存储空间大数据,从最基本的数据入库存储开始. 1目录 1.1 gdal2.1增加支

大数据时代的数据存储,非关系型数据库MongoDB

在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构.然而,在信息技术爆炸式发展的今天,大数据已经成为了继云计算,物联网后新的技术革命,关系型数据库在处理大数据量时已经开始吃力,开发者只能通过不断地优化数据库来解决数据量的问题,但优化毕竟不是一个长期方案,所以人们提出了一种新的数据库解决方案来迎接大数据时代的到来——NoSQL(非关系型数据库). 为什

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

一.前言 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(HIS).影像存档和通信系统(PACS).电子病历系统(EMR)和区域医疗卫生服务(GMIS)等成功实施与普及推广,而且随着日新月异的计算机技术和网络技术的革新,进一步为数字化医院带来新的交互渠道譬如:远程医疗服务,网上挂号预约. 随着IT技术的飞速发展,80%以上的三级医院都相继建立了自己的医院信息系统

大数据测试之hadoop命令大全

大数据测试之hadoop命令大全 1.列出所有Hadoop Shell支持的命令  $ bin/hadoop fs -help2.显示关于某个命令的详细信息  $ bin/hadoop fs -help command-name3.用户可使用以下命令在指定路径下查看历史日志汇总  $ bin/hadoop job -history output-dir这条命令会显示作业的细节信息,失败和终止的任务细节.4.关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看