设为首页 收藏本站
查看: 1001|回复: 0

[经验分享] Mongodb大数据语法大全

[复制链接]
YunVN网友  发表于 2018-10-25 06:38:17 |阅读模式
  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()


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-626048-1-1.html 上篇帖子: MongoDB 数据库备份脚本 下篇帖子: Linux下MongoDB自动备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表