长话短说

  经过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 myNewDB

db.myNewCollection1.insertOne( { x:  } )

注意:

如果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()
}

- 点号选择器

- 嵌套文档

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

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

P3  BSON类型

BSON是一个二进制序列化格式, 用于在MongoDB中存储文档、进行远程过程调用。每个BSON类型都有int,string 标识,

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': }).sort( { _id:  } ).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')<
}
})

④ 时间过滤

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

⑤ Mongodb 聚合后过滤

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

MongoDB 快速扫盲贴的更多相关文章

  1. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  2. MongoDb 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...

  3. MongoDb 快速翻页方法

    翻阅数据是MongoDB最常见的操作之一.一个典型的场景是需要在你的用户界面中显示你的结果.如果你是批量处理的数据,同样重要的是要让你的分页策略正确,以便你的数据处理可以规模化. 接下来,让我们通过一 ...

  4. 1.JVM中的五大内存区域划分详解及快速扫盲

    本博客参考<深入理解Java虚拟机>这本书 视频及电子书详见:https://shimo.im/docs/HP6qqHx38xCJwcv9/ 一.快速扫盲 1. JVM是什么   JVM是 ...

  5. MongoDB快速入门指南与docker-compose快体验

    MongoDB快速入门指南与docker-compose快体验 MongoDB相对于RDBMS的优势 模式少 -MongoDB是一个文档数据库,其中一个集合包含不同的文档.一个文档之间的字段数,内容和 ...

  6. [你必须知道的NOSQL系列]专题一:MongoDB快速入门

    一.前言 现在越来越多的公司开始采用非关系数据库了,并且很多公司的面试都要求面试者有MongoDB的使用经验,至于非关系数据库与关系型数据库之间的区别大家可以自行百度.但是作为程序员的我们,既然大部分 ...

  7. MongoDB快速上手

    1.  MongoDB简介 MongoDB是一个跨平台的基于Key_Value键值对形式保存数据的NoSQL文档类型数据库. NoSQL(not only sql)数据库,泛指非关系型数据库. 1.1 ...

  8. MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门

    [引言] 毕竟现在MongoDB还是出于成长阶段,所以现在网上相关的资料很少,而且大部分还都是针对于MongoDB的老版本的.再加上MongoDB的频繁升级.重大更新等等,导致菜鸟学习的难度增大. 好 ...

  9. 0基础学Java快速扫盲指南,月入2W的基础

    学Java,掌握一些基本的概念是第一步,本文简单为大家介绍一些扫盲级别的内容,希望帮助小白快速入门. 一.基本概念 JVM:java虚拟机,负责将编译产生的字节码转换为特定机器代码,实现一次编译多处执 ...

随机推荐

  1. 扛把子组作业要求 20191024-3 互评Alpha阶段作品

    此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/9860] 组名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 刘信鹏 ...

  2. 【2018寒假集训 Day1】【位运算】翻转游戏

    翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...

  3. java中大整型BigInteger及setBit和testBit方法

    最近在修改公司之前的项目,在项目中遇到了权限校验的问题,代码中出现了BigInteger的setBit()testBit()方法,之前未接触过,所以了解了下BigInteger. 在Java中,由CP ...

  4. es6 filter方法应用

    let arr =[ {title:'aaaa',read:100,hot:true}, {title:'bbbb',read:50,hot:false}, {title:'ccc',read:100 ...

  5. LESSON 4- Entropy and Asymptotic Equipartition Property

    1.        Entropy 2.        序列熵(无记忆,有记忆,马尔科夫) 3.   Fixed-to-variable-length codes  (给n个输出symbols进行变长 ...

  6. 算法整理(php语言完成),持续更行中......

    一下所有实例中,均在同一个方法中,所以算法使用内部函数完成 归并排序 public function test1Action () { $tmp = 0; $al_merge = function($ ...

  7. Chapter 02—Creating a dataset(Part2)

    三. 导入数据 图02-03:Source of data that can be imported into a dataset 11. 从键盘导入数据 (1)可能是最简单的数据导入方式. (2)使 ...

  8. 堡垒机WebSSH进阶之实时监控和强制下线

    这个功能我可以不用,但你不能没有 前几篇文章实现了对物理机.虚拟机以及Kubernetes中Pod的WebSSH操作,可以方便的在web端对系统进行管理,同时也支持对所有操作进行全程录像,以方便后续的 ...

  9. Unity3D 卡通描边之控制线条粗细

    一.前言 之前我发表过一篇Unity3D 卡通渲染 基于退化四边形的实时描边,最重要的实时描边已经实现了,本文接下来要完善一下它. 在之前的实时描边中,使用了几何着色器中的LineStream来进行绘 ...

  10. 华为云ModelArts2.0来袭

    [摘要] modelarts自发布以来,不断地更新增加新的功能来为AI工程师们带来新的服务,在这次的全联接大会上EI服务产品部总经理贾永利宣布--华为云AI重装升级,并重磅发布一站式AI开发管理平台M ...