MongoDB知识点总结

MongoDB简介

MongoDB数据库是一种可扩展的敏捷NoSQL数据库,它是基于文档存储模型。在这种模型下,数据会被存储为文档,而不是我们熟知的例如MySQL、Oracle等的行和列的存储。文档是以BSON对象的形式存储。

MongoDB旨在实现一个高性能、高可用、可自动扩展的数据存储,MongoDB因为速度快、可扩展性强、易于实现、为需要存储用户评论、博客和其他内容的网站提供了极佳的后端存储解决方案:

面向文档:MongoDB的数据存储是以文档存储的,其数据在数据库中的存储格式与服务器端脚本和客户端处理的格式非常接近,这避免了将数据在行和对象之间进行转换。

高性能:MongoDB是市面上性能最高的数据库之一。

高可用性:MongoDB的复制模型使其很容易保持高可用性,同时能够提供高性能和高扩展性。

高可扩展性:MongoDB的结构使得能够将数据分布到多台服务器,从而是轻松的实现横向扩展。

对SQL注入攻击免疫:MongoDB将数据存储为对象,而不是使用SQL字符串,因此对SQL注入攻击免疫。

NoSQL现在的产品有很多,其中最典型的就是Redis和MongoDB,其一般实现存储数据的结构有以下几种:

文档存储数据库
文档存储数据库采用面向文档的方法来存储数据,其理念是可讲单个实体的所有数据都存储在一个文档中,而文档可存储在集合中。其代表就是MongoDB、CouchDB。

键/值数据库
该种类型的存储是最简单的NoSQL数据库,这些数据库存储数据时不采用任何模式,键可指向任何数据类型,从对象到字符串值,再到编程语言的函数。
键/值存储的有点是易于实现和添加数据因此非常适合用于提供基于键来存储和检索数据的简单存储,缺点是无法根据存储的值来查找元素。其代表是Redis。

列存储数据库
列存储数据库是在键空间内以列的方式存储数据,其中键空间基于独一无二的名称、值和时间戳。这类似与键/值数据库,但列存储数据库适合用于存储根据时间戳来区分有效内容和无效内容的数据,这提供了这样的有点,即能够让数据库中存储的数据过期。部分代表 Hbase、Cassandra、Hypertable

图存储数据库
图存储数据库是为能够轻松将数据表示为图,这意味着元素通过他们之间的关系相关联,而这些关系的数量是不确定的,就像家谱、社会关系、航线拓扑图或标准交通图那样。部分代表Neo4J、FlockDB

对象存储
通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。其代表为db4o、Versant

xml数据库
高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。其代表为Berkeley、DB

NoSQL的优点/缺点
优点:

  • 高可扩展性
  • 分布式计算
  • 低成本
  • 架构的灵活性,半结构化数据
  • 没有复杂的关系

缺点:

  • 没有标准化
  • 有限的查询功能(到目前为止)
  • 最终一致是不直观的程序

MongoDB基础定义

连接(Connection)、数据库(Database)、集合(Collection)、文档(Document)是MongoDB的重要的基础组件,了解这些组件能够帮助大家对MongoDB的存储数据有更清晰的认识,如果大家数据Mysql、orcale等关系型数据库的话。理解这些东西非常简单,只需要把一些观念转变一下即可。

连接(Connection)

顾名思义,连接对象能让我们访问MongoDB服务器,它表示到服务器的连接,让我们能够获取首选项。

要创建Connection对象,我们可以在MongoDB shell中使用Mongo(host:port),,或者在JavaScript文件中使用var con = new Mongo(host:port),或者使用connect(url, user, password)方法,该方法等同于Mongo().getDB();

文档(Document)

文档MongoDB的核心,其是MongoDB存放数据的最最基本的一个单位,每一个文档存放了MongoDB的一条数据。我们可以对比下关系型数据库中的行,其概念虽然不一致,但是其作用是一致的,都是表示一条数据,只不过关系型数据库中的一条数据是放在一张表中的一行,而MongoDB的一条数据则是一个集合中的一个文档。

MongoDB的存放数据是以BSON格式存储到文档中的,也就是说,每一个文档都是一条BSON数据,例如:{“name”:”test”,”age”:18}.其内部有两个键name、age,其值分别为test、18.

文档中的键值对的是有顺序的,比如{“age”:18,”name”:”test”}和上一条是两条数据,而不是同一条。

文档中每个键对应的值,不仅仅是字符串类型,可以是所有的数据类型:int、json、string、boolean等等,甚至于其值可以是一个嵌入的另一个文档。

对于文档中的键,有几点需要注意
(1)键不能含有”\0”(空字符)。因为这个字符在文档中表示键的结尾。
(2)”.”和”$”是保留字段,非常不建议使用,只有在特定的情况下才会使用,比如”.”字符,该字符在mongoDB中表示取其子字段,所以如果你在键中使用了该字段,取的就不是该字段了。比如{”data.page”:1},这时候我们如果取”data.page”的值,就不是”data.page”这个键了,而是”page”字段的值了。
(3)_开头的键也是保留的,不建议使用。
(4) 键区分大小写,”Foo”和”foo”是两个不同的键。
(5)一个文档中键不能重复。
在MongoDB的文档中,其数据是非常灵活的,两个完全不一样的文档,可以放在同一个集合中,这在关系型数据库中,是不能实现的,除非创建一个所有字段都包含的表。在MongoDB的文档中则不需要。这也是MongoDB的一个非常nice的地方。

集合(collection)

集合表示多个文档的集合,相当于关系型数据库的表(table),使用集合对象,可以对集合中的文档进行增删改查操作。

访问集合有两种方式:
(1)在mongoDB shell中直接使用db.collectionName,比如db.mycollection.find()实现查找mycollection集合中的所有文档。注:该方式只适用与shell中
(2) mycollection = db.getCollection(“mycollection”);mycollection.find()。该方法可以在JavaScript文件和shell中使用
MongoDB提供了很多方法,用于对集合进行一系列的操作,大家可以点击上面的链接查看最新的方法。

数据库(Database)

该数据库与MonogDB数据库不是一个东西,MongoDB数据库表示的是MongoDB这个产品,以及它的用处。但是此处的数据库,是MongoDB里面的一个结构对象,我们可以参考MySql数据库的数据库。

MongoDB中的数据库,它可以让我们执行添加用户、访问集合等操作。

在MongoDB中创建一个数据库有两种方法:
(1)在MongoDB shell中使用use database命令,该命令是如果存在该数据库,MongoDB会将焦点切换到该数据库,如果该数据库不存咋,则会隐式的创建该数据库,并且将焦点切换到该数据库,然后我们可以操作该数据库中集合与数据等。当我们把焦点切换到该数据库时,我们就可以使用db关键字代表当前数据库,并且使用该关键字可以调用数据库的方法,比如:db.createUser(…).注:该方法只能在MongoDB shell中使用
(2)我们可以使用Connection对象的方法getDB()来创建一个Database对象,比如:con = new Mongo(“localhost”); mdb = con.getDB(“myDB”); mdb.getName();或者mdb = connect(“localhost:27017/myDB”); mdb.getName()。该方法可以在shell中使用,也可以在JavaScript文件中使用。

  1. 管理数据库

显示数据库列表
想要显示当前系统中的数据库列表,我们可以使用show dbs命令

切换到其他数据库
在MongoDB中,我们操作某个数据库中的集合、文档、用户的时候,有一个前提,就是当前的db句柄,必须在要操作的数据所在的数据库上,也就是说当前数据库必须是操纵的数据所在的数据库,那么我们想要操作别的数据库的数据,就需要切换数据库句柄,我们可以使用db.getSiblingDB(database)方法和use database。查看当前数据库句柄,我们可以直接使用db命令。

创建数据库
上面说了,创建数据库我们可以使用use database命令,MongoDB支持隐式的创建数据库,当然我们也可以使用db.createCollection(database)方法创建数据库。

删除数据库
删除数据库,首先需要将db句柄切换到要删除的数据库中,然后调用db.dropDatabase()方法
注:删除数据库,并不会修改db句柄,所以大家在删除当前数据库时,下一步想要操作别的数据库,大家还需要切换下db句柄。

2.管理集合

创建集合
我们想要在某个数据库中创建一个集合,需要先将当前db句柄切换到那个数据库上,然后运行db.createCollection(name, options)方法创建集合,其详细的介绍可以查看官网说明。

删除集合
要删除一个集合,我们可以使用db.collection.drop()方法,如果我们只是想清空当前集合中的数据,而不是删除当前集合,我们可以使用db.collection.remove()方法

3.示例数据集
接下来的学习中,我们会进行大量的实验操作,那么需要大量的数据进行支持,所以我将《MongoDB入门经典》中的实例数据集下载了下来,大家可以自行下载,然后运行到自己的MongoDB中。密码是hmhg。

MongoDB的连接、配置、管理工具

MongoDB shell:
MongoDB shell 因为是基于交互式的JavaScript,所以在MongoDB shell中可以使用一切的JavaScript语法,

MongoDB Compass
以及MongoDB官方提供的一个图形工具MongoDB Compass
MongoDB 3.2引入了MongoDB Compass-一个图形化工具,能够帮助您在不需要知道MongoDB查询语法的前提下,便利地分析和理解您的数据库模式,并且帮助您可视化地构建查询。

集群

mongodb集群搭建有三种方式。
1、Master-Slave模式
2、Replica-Set方式
3、Sharding方式

其中,第一种方式基本没什么意义,官方也不推荐这种方式搭建。另外两种分别就是副本集和分片的方式。今天介绍副本集的方式搭建mongodb高可用集群。

副本集的方式也很容易理解,这里需要一个主节点,一个备节点,如果主节点发生故障,那么会启用备节点,当主节点修复之后,主节点再次恢复为主节点,备节点不再是主节点的角色。副本集的方式还需要一个角色,那就是仲裁节点,它不存储数据,他的作用就是当主节点出现故障,选举出备节点作为主节点,继续保证集群可用。客户端连接时只连接主节点或者备节点,不用连接仲裁节点。

mongodb集群搭建方式有三种,1、主从(官方已经不推荐),2、副本集,3、分片。这里介绍如何通过分片sharding方式搭建mongodb集群。sharding集群方式也基于副本集,在搭建过程中,需要对分片和配置节点做副本集。最后将做好的副本集的分片加入到路由节点,构成集群。

sharding方式的集群中,有三类角色,分别是shard,config,router。如下图所示。
在这里插入图片描述
shard:分片节点,存储数据。

config:配置节点,不会存储数据,会存储元数据信息,比如片键的范围。

router:路由节点,是mongo集群与外部客户端连接的入口,他提供mongos客户端,对客户端透明,让客户端感觉使用单节点数据库。

命令

基础部分
连接数据库:一般连接数据库,直接使用mongo命令即可,如果连接远程数据库,需要通过–host指定远程数据库主机地址,如果还需要指定端口,那么加上–port参数。

在这里插入图片描述
创建数据库:mongo数据库和关系型数据库不一样,也不像cassandra需要创建schema,需要创建时,直接使用use [database]命令即可,如果数据库存在,那么就是切换数据库,如果不存在,就是创建。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB学习手册 ......................................................................................................................... 1 说明.......................................................................................................................................... 2 一、 Mongodb简介 .......................................................................................................... 4 二、 MongoDB特性 ......................................................................................................... 5 适用场景: ....................................................................................................................... 5 不适用场景: ................................................................................................................... 6 三、 MongoDB的工作方式.............................................................................................. 6 四、 MongoDB的下载 ..................................................................................................... 8 五、 MongoDB的安装 ..................................................................................................... 9 六、 MongoDB数据类型................................................................................................ 12 1. Timestamp类型 ...................................................................................................... 12 2. ObjectId类型 .......................................................................................................... 12 3. 数据库关联 ............................................................................................................. 14 七、 GridFS文件系统 ..................................................................................................... 15 八、 索引 ......................................................................................................................... 16 九、 主(Master)/从(slave)数据库同步 ................................................................ 20 1. 建立主/从服务器 ................................................................................................... 20 2. 相关参数说明 ......................................................................................................... 21 3. Slave顶替Master ................................................................................................... 22 4. 切换Master/Slave角色 ......................................................................................... 22 5. 更新主服务器位置 ................................................................................................. 22 十、 MongoDB分片和集群............................................................................................ 24 1. 简单分片实例 ......................................................................................................... 24 2. 高级分片实例 ......................................................................................................... 29 十一、 数据库基本操作:增查删改 ............................................................................. 37 1. Insert ....................................................................................................................... 37 2. Query ....................................................................................................................... 38 3. Remove.................................................................................................................... 52 4. Update ..................................................................................................................... 53 十二、 Shell控制台 ........................................................................................................ 62 1. 执行.js文件 ............................................................................................................ 62 2. –eval ........................................................................................................................ 62 3. 脚本和互动的区别 ................................................................................................. 62 十三、 安全与认证 ......................................................................................................... 63 1) 开启安全认证 ......................................................................................................... 63 2) 添加用户 ................................................................................................................. 64 3) 认证 ......................................................................................................................... 64

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值