mongodb 数组添加_NoSQL之MongoDB——简介

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

1.文档数据库

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

69c526114600bbdd383fa749d89d916a.png

使用文档的优点:

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

2.主要特性

高性能

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

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

丰富的查询语言

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

高可用性

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

横向扩展

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

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

支持多存储引擎

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

3.数据库和集合

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

39d8a1cc4a27b2bf1a3dd12da3cb286f.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A-Frame WEB VR框架初体验

aFrame是一个Web VR框架&#xff0c;底层是基于threejs的&#xff0c;刚好项目也用到了threejs&#xff0c;就用aFrame试了下效果。在网页上看起来&#xff0c;aFrame就是把threejs的的实现包装成一个实体标签。 代码&#xff1a; <!DOCTYPE html> <html> <he…

Buying Feed, 2010 Nov (单调队列优化DP)

约翰开车回家&#xff0c;又准备顺路买点饲料了&#xff08;咦&#xff1f;为啥要说“又”字&#xff1f;&#xff09;回家的路程一共有 E 公里&#xff0c;这一路上会经过 K 家商店&#xff0c;第 i 家店里有 Fi 吨饲料&#xff0c;售价为每吨 Ci 元。约翰打算买 N 吨饲料&…

python django部署docker_centos利用docker部署django项目

1.Docker 要求 CentOS 系统的内核版本高于 3.10 &#xff0c;验证你的CentOS 版本是否支持 Dockeruname -r2.安装各种依赖包yum install -y yum-utils device-mapper-persistent-data lvm23.设置yum源yum-config-manager --add-repo https://download.docker.com/linux/centos/…

一次真实的XXS攻击

这是一个真实的事&#xff0c;一家比较大的公司举办的一个全国性的投票&#xff0c;然而&#xff0c;页面确实写得很烂&#xff0c;做假太容易。 首先&#xff0c;找到投票按钮的源代码&#xff1a; 这个”tp”类就是投票事件的定位关键字。 然后&#xff0c;打开source下的源…

【WPF学习笔记】[转]周银辉之WPF中的动画 晓风影天之wpf动画——new PropertyPath属性链...

&#xff08;一&#xff09;WPF中的动画 动画无疑是WPF中最吸引人的特色之一&#xff0c;其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互。这里我们讨论一下故事板。在WPF中我们采用Storyboard&#xff08;故事板&#xff09;的方式来编写动画&#xff0c;为了对Story…

python无法使用1号gpu_详解tensorflow2.x版本无法调用gpu的一种解决方法

最近学校给了一个服务器账号用来训练神经网络使用&#xff0c;服务器本身配置是十路titan V&#xff0c;然后在上面装了tensorflow2.2&#xff0c;对应的python版本是3.6.2&#xff0c;装好之后用tf.test.is_gpu_available()查看是否能调用gpu&#xff0c;结果返回结果是false&…

使用Chrome Dev Tools, deb.js调试Javascript小技巧

本文讲介绍一些基于 Chrome Dev Tools 的实用的客户端Javascript 调试小技巧。我将重点关注那些无从下手&#xff0c;不知道该在哪儿添加断点的情景。 首先看下本文主题&#xff1a; 找出哪段代码正在修改了页面找出谁发送了某个ajax请求在抛出异常时触发断点条件断点事件断点…

jenkins Auth fail验证失败

重新设置密码转载于:https://www.cnblogs.com/cocoat/p/5982931.html

CSS3 Perspective

一 、在元素的父元素上使用 在父元素上使用Perspective属性可以使用透视投影视图&#xff0c;在父元素上加上&#xff1a; perspective:400px 表示相机距离屏幕位置为400px。默认相机对准父元素的中心&#xff0c;要重设相机的焦点可以使用&#xff1a; perspective-origin…

在ASP.NET Core使用Middleware模拟Custom Error Page功能

一、使用场景 在传统的ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那么默认的,当这个Action抛出了异常时MVC将会显示Error视图,该视图位于~/Views/Shared目录下。 自定义错误页面的…

状态模式案例分析

需求 初始状态下&#xff0c;【暂停按钮】不可点&#xff0c;所有数轴可调: 点击【动态波】后&#xff0c;【暂停按钮】可点&#xff0c;所有数轴可调&#xff1a; 点击【暂停按钮】后&#xff0c;“暂停”变为“播放”&#xff0c;所有数轴不可调&#xff1a; 分析需求 上面…

Linux系统IP地址

1、IP地址概述 2、配置IP地址 查看IP地址 在网卡上绑定一个IP地址 同一张网卡上绑定多个IP 绑定一块网卡设备 修改或删除IP地址 IP地址概述 这里不多赘述&#xff0c;参考《计算机网络》课程。 配置IP地址 [rootweekend110 ~]# ifconfigeth0    Link encap:Ethernet HWadd…

qwidget多个窗口同步_Linux命令screen—终端切换,工作环境保存,画面同步,防断网...

Screen基础Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话&#xff0c;并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。创建一个新的窗…

Snap svg:路径变换和相交计算

Snap.svg对原生的svg进行了封装&#xff0c;为svg的创建、操作提供了便捷的方法&#xff0c;但是官网的文档对一些概念没有解释&#xff0c;难免会造成困扰。比如说路径的旋转&#xff0c;就存在变换后得不到路径交点的问题。 用普通的变换得不到路径的相交点 Snap.svg提供了…

Linux文件基本操作

使用declare命令创建一个变量名为 tmp 的变量&#xff1a; 使用号赋值运算符为变量 tmp 赋值为 dunzhu&#xff1a; 读取变量的值&#xff0c;使用echo命令和$符号&#xff08;$符号用于表示引用一个变量的值&#xff0c;初学者经常会忘记输入&#xff09; 在dunzhu家目录创建一…

Snap svg 主要对象

对象概述Elementsvg规定的元素&#xff0c;提供修改属性、绑定事件、操作数据、操作层级关系、动画等方面的方法&#xff0c;类似jquery选取的元素Fragment虚拟节点&#xff0c;其用处是可以用js创建多个元素&#xff0c;添加到Fragment&#xff0c;不会影响到实际的DOM&#x…

初中位似图形作图_[如何画位似图形] 位似图形的画法及步骤

如何画位似图形位似变换是新课程标准中涉及的一个重要知识点&#xff0c;它是图形变换的一种&#xff0c;实际上它是相似变换的一种特殊情形&#xff0c;存在位似中心———即对应顶点连线的交点&#xff0e;其位似比就是相似比&#xff0e;作为一个新的知识点&#xff0c;越来…

DES 加密 解密

EncryptUtil feiyangklDES 一行代码完成DES加密&#xff0c;加密模式 DES CBC DEMO GIF DEMO 简介 最近项目中用到DES加密&#xff0c;在这里整理成篇&#xff0c;供大家参考阅读&#xff0c;在使用该demo过程中&#xff0c;你可能会遇到一些问题&#xff0c;首先你需要看一下…

bootstrap带有下拉按钮的输入框_关于bootstrap--表单(下拉select、输入框input、文本域textare复选框checkbox和单选按钮radio)...

html 里面的 role 本质上是增强语义性&#xff0c;当现有的HTML标签不能充分表达语义性的时候&#xff0c;就可以借助role来说明。通常这种情况出现在一些自定义的组件上&#xff0c;这样可增强组件的可访问性、可用性和可交互性。role的作用是描述一个非标准的tag的实际作用。…

CSS3 线性渐变背景的过渡效果

对于background-color&#xff0c;可以直接transition: background-color 2s就能实现过渡效果&#xff0c;但对于background:-webkit-radial-gradient(circle,#ffc71d 0,rgba(168,117,14,.5) 130%);就无能为力了。对于这种复杂的背景&#xff0c;只能给opacity添加过渡效果了&a…