Processing math: 100%

Mongodb大数据语法大全

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

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

    gtelt小于 ltene 不等于

    指定一个匹配的数组

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


本文转自 DBAspace 51CTO博客,原文链接:http://blog.51cto.com/dbaspace/2049414


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
打赏
0
0
0
0
342
分享
相关文章
【MongoDB】Replica 频繁插入大数据的问题
【4月更文挑战第2天】【MongoDB】Replica 频繁插入大数据的问题
WPF与性能优化:掌握这些核心技巧,让你的应用从卡顿到丝滑,彻底告别延迟,实现响应速度质的飞跃——从布局到动画全面剖析与实例演示
【8月更文挑战第31天】本文通过对比优化前后的方法,详细探讨了提升WPF应用响应速度的策略。文章首先分析了常见的性能瓶颈,如复杂的XAML布局、耗时的事件处理、不当的数据绑定及繁重的动画效果。接着,通过具体示例展示了如何简化XAML结构、使用后台线程处理事件、调整数据绑定设置以及利用DirectX优化动画,从而有效提升应用性能。通过这些优化措施,WPF应用将更加流畅,用户体验也将得到显著改善。
398 1
【MongoDB复制集瓶颈】高频大数据写入引发的灾难,如何破局?
【8月更文挑战第24天】在MongoDB复制集中,主节点处理所有写请求,从节点通过复制保持数据一致性。但在大量高频数据插入场景中,会出现数据延迟增加、系统资源过度消耗、复制队列积压及从节点性能不足等问题,影响集群性能与稳定性。本文分析这些问题,并提出包括优化写入操作、调整写入关注级别、采用分片技术、提升从节点性能以及持续监控调优在内的解决方案,以确保MongoDB复制集高效稳定运行。
139 2
【MongoDB 专栏】MongoDB 在大数据场景下的应用
【5月更文挑战第11天】MongoDB,适用于大数据时代,以其灵活数据模型、高可扩展性和快速性能在大数据场景中脱颖而出。它处理海量、多类型数据,支持高并发,并在数据分析、日志处理、内容管理和物联网应用中广泛应用。电商和互联网公司的案例展示了其在扩展性和业务适应性上的优势,但同时也面临数据一致性、资源管理、数据安全和性能优化的挑战。
763 1
【MongoDB 专栏】MongoDB 在大数据场景下的应用
MaxCompute产品使用合集之sql代码中支持插入jinja语法语句吗
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
【6月更文挑战第4天】DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
163 1
MaxCompute产品使用合集之如何将JSON格式数据同步到MongoDB
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
深入解析 MongoDB 与 Python:基本语法、实用示例与最佳实践
深入解析 MongoDB 与 Python:基本语法、实用示例与最佳实践
141 0
MongoDB分片:打造高性能大数据与高并发处理的完美解决方案
MongoDB分片:打造高性能大数据与高并发处理的完美解决方案
338 0