MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性

1.文档数据库

MongoDB用一个文档来表示一条记录,文档的数据结构由键值对组成。MongoDB文档类似于JSON对象,字段值可能是文档,数组,或文档数组。

使用文档的优点:

  • 文档中字段值的数据类型同大多数编程语言中的原生数据类型一致。
  • 嵌入式文档和数组减少了连接查询的需求。
  • 动态的文档结构支持多态性。

2.主要特性

高性能

MongoDB支持高性能数据存储。特别地:

  • 支持嵌入式数据模型以减少对数据库系统的I/O
  • 利用索引实现快速查询,并且嵌入式文档和集合也支持索引

丰富的查询语言

MongoDB提供了丰富的查询语言以支持读写操作和聚集操作、文本检索、地理信息查询

高可用性

MongoDB的复制能力被称作复制集(replica set),它提供了自动的故障迁移和数据冗余。一个复制集是一组包含了相同数据的多台MongoDB服务器,它提供了冗余性和加强了数据的可用性。

横向扩展

MongoDB的横向扩展能力是其核心功能的一部分:

  • 分片的数据分布在服务器集群上。
  • 带标签的分片能够引导数据到指定的分片上。

支持多存储引擎

包括:WiredTiger Storage Engine,MMAPv1 Storage Engine。此外,MongoDB 提供可插拔存储引擎API,允许第三方开发者为MongoDB开发存储引擎。

3.数据库和集合

MongoDB 存储BSON文档,例如数据记录在集合中,集合在数据库中。

3.1数据库

在MongoDB 中数据库持有集合。

在Mongo shell中,选中一个数据库使用如下命令:use ,例如:

use myDB

创建数据库

如果待操作的数据库不存在,那么在第一次向MongoDB 存储数据时,MongoDB会创建这个数据库。例如,使用如下命令操作一个不存在的数据库。

use myNewDB

db.myNewCollection1.insert( { x: 1 } )

insert()操作创建了数据库myNewDB,若集合myNewCollection1也不存在,同样地集合myNewCollection1也被创建。

3.2集合

MongoDB 在集合中存储文档,集合类似于关系数据库中的表。

创建一个集合

如果一个集合不存在,使用下面命令时集合会被创建:

db.myNewCollection2.insert( { x: 1 } )

db.myNewCollection3.createIndex( { y: 1 } )

insert() 和 createIndex()在集合不存在的情况下会创建集合。

显式创建集合

MongoDB 提供了db.createCollection()方法来显示地创建一个集合。可以为创建的集合指定参数,例如设置集合的大小或者文档的验证规则,如果不需要指定这些参数,那么没必要显示地创建一个集合。

文档验证(3.2版新特性)

默认情况下,一个集合中的文档不必具有相同的结构 ,

一个集中的文档不需要具有一系列相同的字段,并且不同文档中字段的数据类型可以不同。

修改文档结构

可以更改集合中的文档结构,如添加新字段,删除现有字段,或将字段值更改为一种新的类型,更新文档结构

3.3固定集合

3.3.1概述

固定集合,即具有固定大小的集合,它支持基于插入顺序的插入和查询这两种高通量操作。固定大小的集合的工作方式类似于循环缓存:一旦一个集合被填满,待插入的文档会覆盖掉最先插入的文档。

3.3.2行为

插入顺序

固定集合保证了插入顺序,因此对于查询操作而言,不需要索引的支持就可以返回多个按顺序排列的文档。没有索引的开销,固定集合支持更高的插入吞吐量。

自动删除最先插入的文档

为了给新文档让出存储空间,固定集合自动删除最先插入的文档而不需要显示的删除操作。

例如,集合oplog.rs中存储了副本集操作日志,这里副本集使用了固定集合。考虑下面对固定集合可能的操作:

  • 存储由大容量系统生成的日志信息。在无索引的情况下,文档插入固定集合的速度与将日志信息写入文件系统的速度相似。此外,先进先出的特性保证了事件的顺序,同时管理了存储的使用。
  • 在固定集合中缓存少量数据。由于缓存重读而非写,你应确保这个集合总在工作集中(例如,内存中)或接受一点点写操作,因为索引需要写操作。

_id 字段索引

固定集合含有_id字段,此字段索引是默认的。

3.3.3限制和建议

更新

如果你要更新固定集合中的文档,创建索引以防止全表扫描。

文档大小(3.2版本变更)

如果更新或替换操作改变了文档大小,则操作失败。

删除文档

不能删除固定集合中的文档,可使用drop() 命令删除整个固定集合并新建之。

分片

固定集合不允许分片。

查询效率

使用自然排序可高效地检索最新插入的元素。这是(有点)像追踪一个日志文件。

聚集操作符$out

不能使用聚集管道操作符$out将结果写入固定集合

3.3.4过程

创建固定集合

在mongo shel中,使用db.createCollection()方法创建固定集合,创建固定集合的时候要指定集合的字节大小,MongoDB将会提前为所创建的固定集合分配存储空间。固定集合的字节大小包含了内部使用的空间大小。

db.createCollection( "log

mongodb 数组添加_NoSQL之MongoDB——简介相关推荐

  1. MongoDB系列(一):简介及安装

    2019独角兽企业重金招聘Python工程师标准>>> 什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加 ...

  2. mongodb 数字 _id_MongoDB学习笔记MongoDB简介及数据类型

    欢迎点击上方蓝字关注我 本文所使用的MongoDB版本为 4.0.10 > db.version();4.0.10 一.MongoDB 介绍 1. MongoDB 的特点 MongoDB 是一个 ...

  3. MongoDB和Node.js的Mongoose简介

    Mongoose是一个JavaScript框架,通常在带有MongoDB数据库的Node.js应用程序中使用. 在本文中,我将向您介绍Mongoose和MongoDB,更重要的是,这些技术适合您的应用 ...

  4. 为mongoDB数据库添加账号步骤

    1.点击桌面左下角得开始菜单输入powershell并以管理员运行 2.输入mongo进行数据库连接 3.输入show dbs查看数据库中都有哪些数据库 4.输入 use admin 进入到admin ...

  5. php mongodb 子查询,MongoDB数组子查询elemMatch

    MongoDB数组子查询elemMatch 在 MongoDB数组子查询elemMatch详解 语法 db_name.collection_name.find({field:{$elemMatch:{ ...

  6. 黑马博客——详细步骤(九)项目功能的实现之mongoDB数据库添加账号

    5. mongoDB数据库添加账号 1. 以系统管理员的方式运行powershell 2. 连接数据库 mongo 3. 查看数据库 show dbs 4. 切换到admin数据库 use admin ...

  7. mongodb数据库添加账号

    以下步骤可以为mongodb数据库添加账号 1.以系统管理员的身份运行powershell (在cmd也可以操作) 2.连接数据库 mongo 3.查看数据库 show dbs 4.切换到admin数 ...

  8. 数据库添加账号(mongoDB)

    mongoDB数据库添加账号 大概删库跑路的前辈太多了,觉得可以设个账号(哈哈哈) 不多哔哔,具体操作如下:每一步都有示例图(哦豁,详尽) 实操开始 1,以管理员身份运行powershell(额~略了 ...

  9. MongoDb数组操作 - unwind解包、group分组统计、sort排序

    MongoDB统计文档(Document)的数组(Array)中的各个元素出现的次数 一,问题描述 [使用 unwind 操作符 "解包" Document 里面的Array中的每 ...

最新文章

  1. R语言使用yardstick包的pr_curve函数评估二分类(binary)模型的性能、并使用autoplot函数可视化模型的PR曲线(precision recall)
  2. Ubuntu Linux 安装 .7z 解压和压缩文件
  3. 美国物联网平台提供商Evrythng获得2480万美元B轮融资
  4. python批量删缩进_Python工具PyCharm常用快捷键
  5. 面向对象程序设计的术语
  6. 价值800的swapidc鸟云模板
  7. 好棒,测试妹子都能看懂的Jenkins Docker安装教程
  8. final、static、finally总结
  9. 第三方支付易宝支付的具体实现
  10. 北邮数电 爱课堂答案 Verilog专题
  11. 【机器学习】监督学习的分类:判别/生成模型,概率/非概率模型、参数/非参数模型
  12. python总结与思考_学Python很久但是一直无法提升!你有思考过究竟是为什么吗?...
  13. 1024为大家带来个猜数字游戏
  14. 微信公众号自定义菜单创建接口
  15. 判断当前手机设备的类型(安卓还是IOS)
  16. 关于树莓派4B的屏幕输入信号源由HDMI变为AV2的处理方法
  17. 一个解决MacBook Pro 突然连接无线不能上网 方案
  18. 今天是十月十日卖萌日
  19. 某教务管理系统APP逆向分析之协议漏洞 2018·2
  20. 测绘专业计算机编程要求,关于一些测绘圈子的信息,你需要了解!

热门文章

  1. 原型 原型链 call / apply
  2. elasticSearch5.x与mysql数据库同步
  3. SpringBoot如何切换Redis默认库
  4. myeclipse链接数据库,SQL语句实现增删改查
  5. greenplum vacuum清理删除数据命令
  6. Flex中的Base64加解密
  7. 自定义安装mysql linux_linux下 安装mysql 问题
  8. 如何快速的解决Maven依赖冲突
  9. 【C++深度剖析教程26】父子间的冲突
  10. 洛谷P4718 【模板】Pollard-Rho算法