MongoDB基础

简介: 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:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

相关文章
|
存储 JSON NoSQL
MongoDB入门-MongDB介绍和安装
MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2130 1
|
NoSQL 数据可视化 MongoDB
mongoDB入门教程二:推荐一款好用的mongoDB可视化工具Robo 3T
mongoDB入门教程二:推荐一款好用的mongoDB可视化工具Robo 3T
786 1
mongoDB入门教程二:推荐一款好用的mongoDB可视化工具Robo 3T
|
11月前
|
存储 NoSQL 物联网
MongoDB应用场景
MongoDB应用场景
|
11月前
|
NoSQL MongoDB 微服务
微服务——MongoDB常用命令——文档的分页查询
本文介绍了文档分页查询的相关内容,包括统计查询、分页列表查询和排序查询。统计查询使用 `count()` 方法获取记录总数或按条件统计;分页查询通过 `limit()` 和 `skip()` 方法实现,控制返回和跳过的数据量;排序查询利用 `sort()` 方法,按指定字段升序(1)或降序(-1)排列。同时提示,`skip()`、`limit()` 和 `sort()` 的执行顺序与编写顺序无关,优先级为 `sort()` > `skip()` > `limit()`。
386 1
|
7月前
|
JSON NoSQL Shell
MongoDB简介
MongoDB 是一款开源、高性能、无模式的文档型数据库,属于 NoSQL 产品,支持灵活的 BSON 数据格式,结构类似 JSON,适合存储复杂数据。它以文档为最小存储单位,具备高性能、高可用、高扩展性,支持丰富查询及多种数据类型,适用于大规模数据场景。
549 0
|
存储 缓存 NoSQL
MongoDB 是什么?有哪些应用场景?
MongoDB 是一个由 MongoDB Inc. 开发的基于分布式文件存储的面向文档的数据库,自 2009 年推出以来,以其高性能、易部署、模式自由、强大的查询语言和出色的可扩展性受到广泛欢迎。它适用于互联网应用、日志分析、缓存、地理信息系统等多种场景。MongoDB 支持多种编程语言,并提供了丰富的社区支持,便于开发者快速上手。结合板栗看板等工具,MongoDB 可进一步提升数据存储、分析和同步的效率,支持个性化功能实现,助力团队协作和项目管理。
4206 1
|
监控 NoSQL MongoDB
MongoDB的用户管理总结
这篇文章总结了MongoDB的用户管理,包括用户创建、角色分配、用户认证、账号密码配置以及用户删除等操作。
1386 1
|
存储 监控 NoSQL
MongoDB索引解析:工作原理、类型选择及优化策略
MongoDB索引解析:工作原理、类型选择及优化策略
|
存储 NoSQL atlas
探索MongoDB:发展历程、优势与应用场景
MongoDB 是一个开源的文档型数据库,由 DoubleClick 团队于2007年创立,旨在解决传统数据库的扩展性和灵活性问题。它支持 JSON 格式的存储和查询,具备高可用性、高扩展性和灵活性等优势。MongoDB 适用于社交、物联网、视频直播和内容管理等多种场景,并被阿里巴巴、腾讯等一线互联网公司广泛使用。其主要版本包括 MongoDB Atlas(云服务)、MongoDB Enterprise Advanced(商业版)和 MongoDB Community Edition(免费版)。自2009年发布1.0版本以来,MongoDB 不断创新,最新版本为7.0,在性能和功能上持续优化。
991 12
|
SQL NoSQL Java
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
本文介绍了如何在Spring Boot中操作NoSQL数据库MongoDB,包括在MongoDB官网创建服务器、配置Spring Boot项目、创建实体类、仓库类、服务类和控制器类,以及如何进行测试。
339 1
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作