MongoDB学习手册——入门到进阶
一、什么是MongoDB
MongoDB(也称为Mongo)是一种非关系型、开源的、跨平台的文档型数据库。由于MongoDB采用了类JSON的BSON格式存储数据,使得它比传统的关系型数据库在存取非结构化数据方面具有更高的灵活性和可伸缩性。MongoDB最初是由Dwight Merriman、Eliot Horowitz和Kevin Ryan在2007年10月发起的,在过去的十多年中,它取得了很大的成功。因为它非常适合于处理大型、不规则或事件驱动的数据,因此在金融、游戏、社交媒体等领域非常流行。
1.1 MongoDB的特点
相比于传统的关系型数据库,MongoDB有一些独特的特点:
面向文档。 MongoDB存储的数据是互不相同的JSON文档,而不是固定数据结构的表格。这使得MongoDB能够很好地适应复杂、不规则或经常变化的数据模型,数据结构的改变不需要手动更改架构
可扩展性好。 MongoDB可以非常方便地支持分布式、云端和大规模部署,而且可以自动进行负载均衡,这意味着可以轻松添加更多的节点到集群中
支持复杂查询。 MongoDB支持非常复杂的查询操作,包括嵌入式文档、地理位置、文本搜索等功能。
速度快。 MongoDB的读写速度快,原因是它采用了基于内存的NoSQL方案,适合CPU性能较弱的应用场景。
1.2 MongoDB的应用场景
MongoDB的文档型数据库特性以及可扩展性优势,使得它在各种领域获得了很大的成功。
社交媒体。 MongoDB被广泛用于在线社交网络应用中,如Facebook、Twitter等;
大数据。 MongoDB可以处理PB级别的数据存储,能够支持高达一千万用户规模的日活应用;
金融行业。 MongoDB被广泛应用于金融行业的业务处理、资产管理和风险控制。
二、MongoDB的安装和环境配置
2.1 MongoDB的安装
MongoDB官方提供了各种操作系统的下载地址,在Windows上,可以从官网下载.msi安装程序,通过界面安装的方式进行MongoDB的安装。具体步骤如下:
// 进入MongoDB官网 https://www.mongodb.com/download-center/community
// 下载Windows版本对应的msi文件,根据提示安装即可
2.2 MongoDB的配置
在默认情况下,MongoDB的数据在安装根目录下的/data/db目录中,我们可以通过修改MongoDB配置文件的方式来更改数据存储路径、端口号等相关配置。下面是一个常用的MongoDB配置文件mongo.conf的样例:
systemLog:
destination: file
logAppend: true
path: D:\mongodb\logs\mongo.log
storage:
dbPath: D:\mongodb\data\db
net:
bindIp: 0.0.0.0
port: 27017
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled
在完成配置后,我们可以通过CMD命令行或者PowerShell(Windows系统)来启动MongoDB服务。在Windows系统上,可以使用以下命令启动MongoDB:
// 手动启动MongoDB服务
C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe --config "D:\mongodb\mongo.conf"
// 启动MongoDB后台服务
C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe --config "D:\mongodb\mongo.conf" --install
net start MongoDB
三、MongoDB的基本概念
3.1 集合(Collection)
在MongoDB中,文档存储在集合(Collection)中,一个集合类似于关系型数据库中的一张表格,它可以容纳多个文档,每个文档都是集合中的一行数据。例如,我们可以创建一个名为users的集合,用于存储用户数据:
// 创建集合
db.createCollection("users")
// 插入数据
db.users.insertMany([
{ name: "Tom", gender: "male", age: 21 },
{ name: "Lucy", gender: "female", age: 19 },
{ name: "John", gender: "male", age: 25 }
])
// 查找数据
db.users.find({})
3.2 文档(Document)
文档(Document)是MongoDB中的基本存储单元,一个文档就是以BSON(Binary JSON)格式表示的一个JSON对象。每个文档都有一个唯一的_id字段用于标识,如果插入文档时没有明确指定_id字段值,则MongoDB会自动为文档生成一个全局唯一的ObjectId。
3.3 数据库(Database)
在MongoDB中,一个数据库中可以包含多个集合,每个集合只能属于同一数据库。MongoDB没有像关系型数据库那样需要提前创建数据库,因为在添加第一个集合时,MongoDB会自动创建该数据库。
四、MongoDB的数据操作
4.1 插入文档
在MongoDB中,插入数据最常见的方式是通过insert()函数。可以插入单个文档或多个文档到集合中。单个文档的插入可以使用insertOne()函数,多个文档的插入可以使用insertMany()函数。
// 插入单个文档
db.users.insertOne({ name: "Jack", gender: "male", age: 22 })
// 插入多个文档
db.users.insertMany([
{ name: "Mike", gender: "male", age: 26 },
{ name: "Lily", gender: "female", age: 20 }
])
4.2 更新文档
更新MongoDB中的文档最常见的方式是使用update()函数。可以更新整个文档,也可以仅仅更新文档中的特定字段。
// 更新整个文档
db.users.updateOne({ name: "Tom" }, { $set: { age: 26 } })
// 更新特定字段
db.users.updateOne({ name: "Tom" }, { $inc: { score: 10 } })
4.3 删除文档
在MongoDB中,删除文档最常见的方式是使用delete()函数。如果要删除整张表,可以使用drop()函数。
// 删除特定文档
db.users.deleteOne( { name: "Tom" } )
// 删除整张表
db.users.drop()
4.4 查询文档
在MongoDB中,查询文档最常见的方式是使用find()函数。可以使用各种筛选条件、排列方式、投影字段来查询MongoDB中的文档。
// 查找所有文档
db.users.find( {} )
// 查找特定文档
db.users.find( { gender: "male" } )
// 根据条件查找文档
db.users.find( { age: { $gte: 20 } } )
// 根据条件排序
db.users.find().sort( { age: 1 } )
// 投影字段
db.users.find( {}, { name: 1, gender: 1, _id: 0 } )
4.5 聚合查询
MongoDB支持在查询结果集上进行聚合操作,例如求和、求平均值、分组等操作。下面是一个求平均分的例子:
db.scores.aggregate([
{ $group: { _id: "$name", avgScore: {$avg: "$score"} } }
])
五、MongoDB的高级特性
5.1 MongoDB的索引
MongoDB支持多种不同类型的索引用于查询优化,包括单字段索引、多字段索引、文本索引、地理位置索引等。创建索引可以显著提升查询效率。
// 创建单字段索引
db.users.createIndex( { name: 1 } )
// 创建多字段索引
db.users.createIndex( { name: 1, age: -1 } )
// 创建文本索引
db.collection.createIndex( { "$**": "text" } )
// 创建地理位置索引
db.places.createIndex( { location: "2dsphere" } )
5.2 MongoDB的事务
MongoDB在4.0版本及以上支持事务,可以实现多文档之间的原子性操作,保证数据库的数据在更新中的完整性。
5.3 MongoDB的复制和分片
为了实现数据的高可用和可扩展性,MongoDB支持复制和分片机制。复制是指将一份数据副本复制到多台机器上,以提高数据访问的可用性和性能。分片是指将数据分成多个部分存储在多台机器上,以实现数据的水平伸缩,提高系统的性能。
六、总结
本文对MongoDB的基本概念和使用方法进行了简单的介绍,包括集合、文档、数据库,以及MongoDB的插入、更新、删除和查询操作。此外,还介绍了MongoDB的高级特性,如索引、事务、复制和分片等。MongoDB是一种非关系型数据库,具有高可扩展性和灵活性,在大数据场景下有广泛的应用前景。