【node学习-05】mongoDB基础
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
集合中修改name
为lonjin
,设置他的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
集合中删除age
为16
的数据:
db.user.deleteOne({age: 16})
在user
集合中删除age
大于32的数据:
db.user.deleteMany({age: {$gt: 32}})