mogodb学习手册
目录
MongoDB简介
MongoDB 是一个开源、分布式、面向文档的数据库管理系统(NoSQL),由C++语言编写。数据以 BSON 格式的文档形式存储,每个文档可以包含任意复杂度的嵌套结构,支持动态模式(schema-free),即同一个集合中的文档可以有不同的结构。它以其灵活的数据模型、横向扩展能力和高可用性而受到广泛采用。
一、MongoDB与MySQL结构映射关系
MySQL | MongoDB | 解释 |
---|---|---|
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 记录/文档 |
column | field | 字段/域 |
index | index | 索引 |
table joins | 不支持 | 连接 |
primary key | primary key | 主键,MongoDB自动将id设置为主键 |
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用Docker运行MongoDB
1.创建数据挂载目录
cd /opt && mkdir -p mongodb/data/db
2.运行mongodb容器
docker run -d \
--name mongodb \
-p 27017:27017 \
-v /opt/mongodb/data/db:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
mongo:4.4
3.连接mongodb服务
[root@localhost db]# docker exec -it mongodb /bin/bash
root@b5999b9103e1:/#
root@b5999b9103e1:/# mongo -u "root" -p "123456" --authenticationDatabase "admin"
MongoDB shell version v4.4.11
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("38ae6409-5e39-4177-afb2-97e600bc3215") }
MongoDB server version: 4.4.11
三.使用MongoDB
1.基本操作命令
命令 | 解释 |
---|---|
show collections | 查看集合 |
show dbs | 查看所有数据库 |
use config | 使用config数据库 |
db.dropDatabase() | 删除当前数据库 |
db.createCollection(name) | 创建指定名称的集合 |
db.clt_name.drop() | 删除指定集合 |
db.clt_name.insert(document) | 插入文档到指定集合中 |
db.collection_name.save(document) | 插入或更新文档 |
db.collection.remove() | 删除记录,支持条件操作 |
db.clt_name.find() | 查询当前集合文档,支持条件查询 |
db.clt_name.remove({}) | 删除当前集合中所有文档 |
更多命令访问:👉官方文档👈
2.示例
# 在testdb数据库user集合中插入文档信息 {name:"xiaoming",sex:"男",age:23}, {name:"xiaohong",sex:"女",age:22}
use testdb
db.user.insert({name:"xiaoming",sex:"男",age:23})
db.user.insert({name:"LiHua",sex:"男",age:23})
db.user.insert({name:"kangkang",sex:"男",age:20})
db.user.insert({name:"Mary",sex:"女",age:21})
# save和insert都可以实现插入功能,如果传入数据有_id并且和集合中有匹配的_id,save可以实现替换操作
db.user.save({name:"xiaohong",sex:"女",age:22})
# 查询姓名为xiaoming的文档信息
db.user.find({name:"xiaoming"})
# 删除性别为22的文档信息
db.user.deleteOne({age:22})
# 查询文档条数
db.user.find().count()
# 查询文档姓名和性别信息
db.user.find({},{id:1,name:1})
# 查询年龄小于30的文档信息并根据id进行排序(-1为倒序,1为正序)
db.user.find({age:{$lt:30}}).sort(id:-1)
# 跳过n条数据,查m条数据
db.user.find().limit(m).skip(n)
四.索引
MongoDB中有以下几种索引类型:
- 单域索引:对单个域建立索引
- 复合索引:对多个域建立符合索引,有顺序性
- 多建索引:对数组类型中每一个元素建立索引
- 全文索引:支持类型值为string或string数组元素建立索引
- 哈希索引:适合用于等值查询
- 地理空间索引:存储平面或球面上的点
1.索引操作示例
#单字段索引,1升序,-1降序
db.ctl_name.createIndex({"字段名":"排序方式"})
# 查看索引
db.user.getIndexes()
# 查看索引大小
db.user.totalIndexSize()
# 删除索引
db.user.dropIndex("索引名")
五. 客户端工具
MongoDB中比较好用的客户端有Studio 3T和Robo 3T等,习惯使用Navicat操作数据库的也可以使用Navicat for MongoDB。
总结
MongoDB因为其独特的文档模型、强大的水平扩展能力和实时查询分析能力,在现代Web和移动应用、大数据处理以及高度动态、多变数据场景下得到了广泛应用。然而,对于高度事务性的应用场景或需要复杂的跨表JOIN查询的传统业务逻辑,可能更适合采用关系型数据库。