MongoDB基础

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB基础

1. MongoDB简介

一、MongoDB简介

MongoDB是由10gen公司(现已改名为MongoDB Inc.)用C++语言研发的一款数据库,于2009年开源

MongoDB按照类似于JSON的格式存储数据,称作BSON (binary json),由成对的field和value构成,value除了数值和字符之外也可以包括数组([ ]),其他文档等

每一条数据称作一个文档(document)

相对传统关系型数据库,文档之间可以有不一样的格式(字段field),因此更加灵活

可以为数据创建索引,使用特定查询方式来分析统计数据

MongoDB开源免费,遵从GNU GPL协定

二、MongoDB使用的业务场景

适用于:

存储表结构不确定或经常变换的业务数据

数据量很大,但价值较低的数据

数据实时性要求高的数据,MongoDB批量插入性能非常高

不适用于:

对事务要求高的业务;和传统关系型数据库比较,MongoDB对事务的支持较差

需要使用SQL的业务场景

2. 相关术语

一、与传统数据库对照

二、数据库(database)

一个mongodb中可以建立多个数据库。

MongoDB的默认数据库为"db",该数据库存储在data目录中。

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。

不能是空字符串(“”)。

不得含有’ '(空格)、.、$、/、\和\0 (空字符)。

应全部小写。

最多64字节。

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

三、集合(collection)

集合就是 MongoDB 文档组,类似于 关系数据库中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

合法的集合名

集合名不能是空字符串""。

集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。

集合名不能以"system."开头,这是为系统集合保留的前缀。

用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

capped collections

Capped collections 就是固定大小的collection,当document个数超过指定个数,再插入的元素就会覆盖最初始的头部的元素!

优点:

对固定集合进行插入速度极快

按照插入顺序的查询输出速度极快

能够在插入最新数据时,淘汰最早的数据

用途:

储存日志信息

缓存一些少量的文档

限制:

能进行更新,然而,对象不会增加存储空间。如果增加,更新就会失败 。

使用 Capped Collection 不能删除一个文档,可以使用 drop() 方法删除 collection 所有的行。

删除之后,你必须显式的重新创建这个 collection。

三、文档(Document)

特点:

文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

文档中的键/值对是有序的。

文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。

MongoDB区分类型和大小写。

MongoDB的文档不能有重复的键。

文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:

键不能含有\0 (空字符)。这个字符用来表示键的结尾。

.和$有特别的意义,只有在特定环境下才能使用。

以下划线"_"开头的键是保留的(不是严格要求的)。

四、元数据

在MongoDB数据库中名字空间 .system.* 是包含多种系统信息的特殊集合(Collection),如下:

| 集合命名空间 | 描述 |

| — | — |

| dbname.system.namespaces | 列出所有名字空间。 |

| dbname.system.indexes | 列出所有索引。 |

| dbname.system.profile | 包含数据库概要(profile)信息。 |

| dbname.system.users | 列出所有可访问数据库的用户。 |

| dbname.local.sources | 包含复制对端(slave)的服务器信息和状态。 |

对于修改系统集合中的对象有如下限制。

在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。

{{system.users}}是可修改的。 {{system.profile}}是可删除的。

五、MongoDB 数据类型

3.基本操作

一、查看数据库

查看所有数据库

show dbs

二、创建(切换)数据库

创建数据库

use adc

> show dbs

我们刚创建的数据库并不在数据库的列表中, 要显示它,我们需要向db数据库插入一些数据。

db.adc.insert({“name”:“测试数据库”})

> show dbs

三、删除数据库

切换至需要删除的数据库

use adc

> db

删除数据库

db.dropDatabase()

4. 集合

一、创建集合

语法格式:

db.createCollection(name, options)

参数说明:

name: 要创建的集合名称

options: 可选参数, 指定有关内存大小及索引的选项

options 可以是如下参数:

| 字段 | 类型 | 描述 |

| — | — | — |

| capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。

当该值为 true 时,必须指定 size 参数。 |

| autoIndexId | 布尔 | (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |

| size | 数值 | (可选)为固定集合指定一个最大值,以千字节计(KB)。

如果 capped 为 true,也需要指定该字段。 |

| max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |

二、查看集合

show collections

show tables

三、删除集合

语法格式:

db.collection.drop()

返回值

如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。

示例

查看集合

show collections

删除mycol2集合

db.mycol2.drop()

查看集合

show collections

5. 文档

一、插入文档

语法

插入单条数据

db.COLLECTION_NAME.insert(document)

db.COLLECTION_NAME.insertOne(document)

插入多条数据

db.collection.insertMany(document)

二、更新文档

update() 方法

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(

,

,

{

upsert: ,

multi: ,

writeConcern:

}

)

参数说明:

| query | update的查询条件,类似sql update查询内where后面的。 |

| — | — |

| update | update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的 |

| upsert | 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。 |

| multi | 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 |

| writeConcern | 可选,抛出异常的级别。 |

save() 方法

save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(

,

{

writeConcern:

}

)

参数说明:

**document **: 文档数据。

**writeConcern **:可选,抛出异常的级别。

三、MongoDB 删除文档

语法

remove() 方法的基本语法格式如下所示:

db.collection.remove(

,

{

justOne: ,

writeConcern:

}

)

参数说明:

**query **:(可选)删除的文档的条件。

**justOne **: (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

**writeConcern **:(可选)抛出异常的级别。

使用 find() 函数查询数据:

db.col.find()

接下来我们移除 title 为 ‘MongoDB 教程’ 的文档:

db.col.remove({‘title’:‘MongoDB 教程’})

WriteResult({ “nRemoved” : 2 })           # 删除了两条数据

>db.col.find()

如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:

db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):

db.col.remove({})

>db.col.find()

四、MongoDB 查询文档

语法

查询所有文档

db.collection.find(query,projection)

查询第一条记录

db.collection.findOne(query, projection)

格式化显示查询结果

db.col.find().pretty()

选项

query:可选,使用查询操作符指定查询条件

projection:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
3月前
|
存储 NoSQL 数据挖掘
MongoDB应用案例
MongoDB应用案例
64 1
|
7月前
|
存储 NoSQL 关系型数据库
【MongoDB系列笔记】MongoDB相关概念
MongoDB 是一个开源、高性能、无模式的文档型数据库,常用于处理高并发、海量数据的场景,尤其适合社交、游戏、物流、物联网和视频直播等领域。与传统的关系型数据库相比,MongoDB 更适合存储结构较为灵活、数据量大且事务性要求不高的数据。当面临高读写需求、大规模数据存储和高可扩展性需求时,可以选择 MongoDB。MongoDB 支持类似于 JSON 的 BSON 数据格式,具有丰富的数据模型,如文档、集合和数据库,以及强大的查询和索引功能。此外,MongoDB 提供复制集以实现高可用性和水平扩展性,以适应业务发展和数据增长。
171 0
|
7月前
|
存储 运维 负载均衡
MongoDB详解(二)——MongoDB架构与原理
MongoDB详解(二)——MongoDB架构与原理
243 2
|
7月前
|
存储 NoSQL MongoDB
day03—MongoDB基础
day03—MongoDB基础
93 0
|
存储 JSON NoSQL
01 MongoDB - 简介
01 MongoDB - 简介
43 0
|
NoSQL Linux MongoDB
开发中MongoDB遇到的各种问题
开发中MongoDB遇到的各种问题
173 0
|
NoSQL 分布式数据库 MongoDB
|
存储 JSON NoSQL
MongoDB 简介
MongoDB 简介
486 0
MongoDB 简介
|
存储 SQL NoSQL
mongoDB-基础
不能言而无信 今天就先把这个MongoDB 补了
216 0
mongoDB-基础
|
存储 NoSQL MongoDB
MongoDB 应用案例
MongoDB 应用案例
397 0