博客
关于我
MongoDB 快速扫盲贴
阅读量:396 次
发布时间:2019-03-05

本文共 3009 字,大约阅读时间需要 10 分钟。

长话短说

  经过996的历练,开发者潜意识里总是以object的视角看待事物, 现在某些数据库也具备这样的视角。

MongoDB是一个文档型(类JSON 文档)数据库,相比传统的关系型row/column模型,设计者认为类JSON文档是认知事物和使用数据的最佳方式。

MongoDB优势:

  • MongoDB以灵活的、类JSON格式文档形式存储数据,意味着字段含义和字段数量因文档而异,并且数据结构可以随时变化
  • MongoDB文档模型对应应用程序中的对象, 这样你的应用程序可很方便映射到这些文档数据。
  • MongoDB内核是一个分布式的数据库,原生支持高可用、水平扩展、物理分布式部署, 同时使用也相当方便
  • MongoDB开源

P1  关键特性

  高性能 : 支持嵌套文档,减少了I/O动作; 索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键

  丰富的查询语法: 数据聚合、文本搜索

  高可用: 自动故障恢复,数据冗余备份(副本集)

  水平扩展:在集群机器上分片存储数据

  支持多种存储引擎

P2 MongoDB文档模型

  Database --Collection - Document;

① MongoDB中,Database存储Collection, Collection存储Document, 

切换Database时使用 use 命令。

use myNewDBdb.myNewCollection1.insertOne( { x: 1 } )

注意:

如果Database不存在,MongoDB会在你首次为该Database 插入数据时创建Database,

如果Collection不存在,MongoDB会在你首次为该Collection插入数据时创建Collection

② Capped Collections: Collection是一个固定大小的集合,支持高速插入和检索,Collection工作模式与循环buffer类似: 一旦Collection 文档填满了分配的空间,会重写oldest文档。

③ 举例Document

 以BSON形式存储Document:

var mydoc = {               _id: ObjectId("5099803df3f4948bd2f98391"),               name: { first: "Alan", last: "Turing" },               birth: new Date('Jun 23, 1912'),               death: new Date('Jun 07, 1954'),               contribs: [ "Turing machine", "Turing test", "Turingery" ],               views : NumberLong(1250000)            }

 

  - 点号选择器

  - 嵌套文档

  -  _id: 每个文档都有一个_id作为主键, 而且必须是第一个字段,_id可使用除Array之外的任何BSON类型。

除了作为Collection中数据存储形式外,MongoDB全程使用 文档模型, 对于查询,更新, 排序, 索引管理同样适用

P3  BSON类型

 BSON是一个二进制序列化格式, 用于在MongoDB中存储文档、进行远程过程调用。每个。

BSON 是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,
BSON有三个特点:轻量性、遍历快、高效性

{"hello":"world"} 存储如下: \x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00

前面"\x16\x00\x00\x00" : 文档的长度,这里是小端表示,即文档的长度是22个字节;

第5个字节:\x02 : 元素的类型,即"world"的类型是string;

"hello"是KeyName,以"\0"结尾,它一般是cstring类型,字节表示是cstring::= (byte*) "/x00" , 其中*表示零个或多个byte字节,\x00表示结束符;

 x06\x00\x00\x00 : string类型的长度;

后面的"world"是value值,它的类型一般是string,double,array,binarydata等类型。

最后一个"\x00" : 文档的结尾

从以上结构看出,BSON文档在内部定义了 文档大小和键值长度,在遍历时能很快确定文档的边界。

 

常见的MongoDB应用脚本

①  过滤出 ExtraFeature array字段不为 null 的文档

db.getCollection('Profiles').find({ExtraFeatures:{$elemMatch:{$ne:null}}})

② 提取Profile表中 _id 字段值(原字段为long类型)

db.getCollection('Profiles').find({"IsDisabled":false},{'_id': 1}).sort( { _id: 1 } ).map( function(u) { return NumberInt(u._id); } )

③ 模糊查询

db.getCollection('MediaNews').find({"Url":/cctv.com/})    //like '%cctv.com%'db.getCollection('Users').find({    $where: function() {            return this.LoginName.lastIndexOf('gridsum.com')<0    }})

 

④ 时间过滤

db.getCollection('MediaNews').find({    PublishTime: {        $gte:ISODate("2017-11-06"),        $lt: ISODate("2017-11-07")    }}).sort({PublishTime:-1})

 

⑤ Mongodb 聚合后过滤

//  按照province聚合,统计方式是求和 db.contest.aggregate([    {"$group" : {_id:"$province", count:{$sum:1}}}]);// 聚合之后havingdb.ConversionPaths.aggregate([    {"$group" : {_id:"$ProfileId", count:{$sum:1}}},    { $match: { count: { $gt: 11 } } },])

 

转载地址:http://jhgzz.baihongyu.com/

你可能感兴趣的文章
Jenkins 集成postman 自动化运行接口测试用例
查看>>
hashlib 简单加密
查看>>
python装饰器实现对异常代码出现进行监控
查看>>
轮评审用例,写用例的重要性-----(python单元测试反思)
查看>>
django+appium实现UI自动化测试平台(开源部分,可定制开发)
查看>>
PAT 1008. Elevator (20)
查看>>
蓝桥杯 密码脱落 LCS
查看>>
第七届C/C++B-方格填数 DFS
查看>>
数据结构课设--3哈夫曼编码译码系统(树应用)
查看>>
pku 1061 青蛙的约会 扩展欧几里得
查看>>
Spring Boot 2.4 配置文件将加载机制大变化
查看>>
WPF之全局快捷键
查看>>
javascript 用函数语句和表达式定义函数的区别
查看>>
基于react hooks,antd4 配置生成表单并自动排列
查看>>
也来玩玩 javascript对象深拷贝,浅拷贝
查看>>
【转载】Kubernetes CNI网络最强对比:Flannel、Calico、Canal和Weave
查看>>
Kubernetes实战总结 - 动态存储管理StorageClass
查看>>
Django实战总结 - 快速开发一个Web服务
查看>>
【DG】主rac + 备rac dg 部署
查看>>
Oracle一次缩小表空间的处理过程
查看>>