mongoDB基础

简介

mongoDB是一种基于分布式文件存储的数据库,由 C++ 语言编写。由 MongoDB 自身提供的高性能数据存储,以及第三方提供的各种数据库管理工具,包括用于查询和分析的 MongoDB 自带的 shell 工具。

特点

  • 高性能:MongoDB 是一个高性能的 NoSQL 数据库,是当前最流行的非关系型数据库之一。
  • 易用性:MongoDB 是一个基于文档的数据库,不需要关系型数据库的 SQL 语言,即使对数据库的操作也不需要关系型数据库的 DDL 语言。
  • 灵活性:MongoDB 是一个基于文档的数据库,可以存储各种类型的数据,包括文档、数组、对象、二进制数据等。
  • 高可用性:MongoDB 是一个高可用性的数据库,可以保证数据的安全性和可用性。
  • 低成本:MongoDB 是一个开源的数据库,使用 C++ 编写,因此具有较高的开发效率,部署方便,成本低廉。
  • 高扩展性:MongoDB 是一个分布式数据库,可以水平扩展,即可以将数据复制到多台服务器上,实现数据的高可用性。

非关系型数据库和关系型数据库的区别

  • 非关系型数据库:非关系型数据库不仅仅是指数据库的存储结构,而是指数据库的存储结构和数据库的操作方式。
  • 关系型数据库:关系型数据库是指数据库的存储结构和数据库的操作方式。

关系型数据库和非关系型数据库的优缺点

  • 关系型数据库的优点:关系型数据库的优点是可以实现关系型数据库的查询,数据更新,数据删除等操作,并且这些操作都是事务性的,即要么全部成功,要么全部失败。
  • 关系型数据库的缺点:关系型数据库的缺点是关系型数据库的查询性能不高,因为关系型数据库的查询是基于表的连接查询,而非关系型数据库的查询是基于文档的嵌套查询

mongoDB使用场景

  • 存储海量数据
  • 存储动态数据
  • 存储大量的结构化和非结构化数据
  • 存储高并发数据
  • 存储大量的静态数据
  • 存储大量的半结构化数据
  • 存储大量的非结构化数据
  • 存储大量的关系数据
  • 存储大量的文档数据

安装

mongoDB版本号奇数为测试版本,偶数为稳定版本,而且在3.2版本之后不再支持32位系统,所以建议安装64位的系统。由于不同操作系统安装方式略有不同,建议google一下或者进入mongoDB官网进行安装。同时推荐下载Navicat Premium来进行数据库的管理。

MongoDB的基础概念

数据存储结构及存储库

在 MongoDB 中,数据存储结构主要由集合(Collection)和文档(Document)组成。这种非关系型数据库的设计灵感来源于 JSON 文件格式,因此非常灵活,适用于处理各种不同形式的数据。

集合

集合是 MongoDB 中的一种数据组织方式,类似于关系数据库中的表。不同的是,集合并不要求其中的文档具有相同的结构,可以容纳各种形式和类型的数据。集合的命名通常采用小写字母,避免使用特殊字符和空格。

示例

假设我们有一个博客应用,其中包含一个集合名为 "articles",用于存储所有文章的数据。每篇文章可以具有不同的字段,例如标题、作者、内容等。示例创建集合的命令如下:

db.createCollection("articles")

文档

文档是 MongoDB 存储数据的基本单元,类似于关系数据库中的行。每个文档都是一个 JSON 风格的对象,可以包含各种字段和值。在一个集合中,文档的结构可以是不同的,这使得 MongoDB 能够轻松地适应变化多端的数据需求。

当我们使用 MongoDB 存储数据时,文档的表示方式与 JSON 非常相似。以下是文档的 JSON 格式示例:

// 在 "articles" 集合中插入一篇文章的文档
db.articles.insert({
  "title": "MongoDB Basics",
  "author": "John Doe",
  "content": "An introduction to MongoDB and its key concepts.",
  "tags": ["NoSQL", "Database"]
})

在这个示例中,我们创建了一个名为 "articles" 的集合,并向该集合插入了一篇文章的文档。文档的结构以 JSON 格式表示,包含了标题、作者、内容和标签等字段。

MongoDB 的灵活性使得文档可以根据实际需求自由定义字段,而集合则提供了一个容纳不同文档的容器。这种方式使得 MongoDB 适用于处理各种数据结构和数据变化的场景。

通过集合和文档,MongoDB 提供了一种直观且强大的方式来存储和组织数据,适应不同数据结构和变化。这种灵活性是 MongoDB 的一项关键特性,使其成为处理各种数据场景的理想选择。

常用 MongoDB 指令

这是一些常用的 MongoDB 命令,方便大家熟悉 MongoDB 的使用。

指令 描述
mongo 连接到 MongoDB 数据库
show dbs 显示所有数据库
use db_name 切换到指定的数据库
db 显示当前数据库
db.dropDatabase() 删除当前数据库
show collections 显示当前数据库中的所有集合
db.createCollection(name) 创建一个新的集合
db.collectionName.insert(document) 在指定集合中插入文档
db.collectionName.find() 查询指定集合中的文档
db.collectionName.update(query, update) 更新指定集合中符合条件的文档
db.collectionName.remove(query) 删除指定集合中符合条件的文档
db.collectionName.drop() 删除指定集合
db.collectionName.find().sort({field: 1}) 按指定字段升序排序文档
db.collectionName.find().sort({field: -1}) 按指定字段降序排序文档
db.collectionName.find().limit(n) 限制查询结果返回的文档数量
db.collectionName.find().skip(n) 跳过指定数量的文档,返回剩余的文档
db.collectionName.find({field: value}) 查询指定字段等于给定值的文档
db.collectionName.find({field: { $gt: value }}) 查询指定字段大于给定值的文档
db.collectionName.find({field: { $lt: value }}) 查询指定字段小于给定值的文档
db.collectionName.find({field: /pattern/}) 使用正则表达式查询指定字段的文档
db.collectionName.aggregate(pipeline) 执行聚合操作(例如,分组、筛选、排序)
db.collectionName.ensureIndex({field: 1}) 创建索引以加速查询
db.collectionName.getIndexes() 查看集合的索引

基本的增删改查

MongoDB 是一个基于文档的数据库,这意味着,与关系型数据库相比,MongoDB 中的数据存储更加灵活。

首先我们创建一个名字为mytest的数据库:

use mytest

并且创造一个名字为user的集合:

db.createCollection("user")

user集合中增加单条数据:

db.user.insertOne({name: 'lonjin', age: 18})

user集合中增加多条数据:

db.user.insertMany([
    {name: 'lonjin2', age: 22},
    {name: 'lonjin3', age: 33}
])

user集合中查询所有数据:

db.user.find()

user集合中查询指定条件的数据:

db.user.find({age: 18})

user集合中查询指定条件的数据(查询age等于18的数据):

db.user.find({age: 18})

user集合中查询age大于18的数据:

db.user.find({age: {$gt: 18}})

user集合中查询age大于18的数据:

db.user.find({age: {$gt: 18}})

user集合中查询age大于18的数据,并且只输出符合条件的一条数据:

db.user.findOne({age: {$gt: 18}})

user集合中修改namelonjin,设置他的age为16的数据:

db.user.updateOne({name: 'lonjin'}, {$set:{age: 16}})

user集合中修改age大于14的数据,将name改为tom

db.user.updateMany({age: {$gt: 14}}, {$set:{name: 'tom'}})

删除

user集合中删除age16的数据:

db.user.deleteOne({age: 16})

user集合中删除age大于32的数据:

db.user.deleteMany({age: {$gt: 32}})