一.mongodb简介:
MongoDB 是一种高性能、开源的 NoSQL(非关系型)数据库,属于 文档型数据库。它以灵活的数据模型、高扩展性和易用性而闻名,特别适合处理大规模、复杂的数据集。MongoDB 是目前最受欢迎的 NoSQL 数据库之一,广泛应用于现代 Web 应用、大数据分析、物联网和云计算等领域。
二.mongodb特点:
1. 灵活的数据模型
-
文档存储:MongoDB 使用 BSON(二进制 JSON)格式存储数据,数据以文档的形式组织,每个文档可以有不同的字段和结构,非常适合处理复杂、动态变化的数据。
-
无模式(Schema-less):与传统关系型数据库不同,MongoDB 不需要预先定义表结构。文档可以灵活地存储不同类型的数据,无需修改整个表结构。
-
嵌套文档:支持嵌套文档和数组,能够更自然地表示复杂数据关系,减少对多表连接的需求。
2. 高性能
-
快速读写:MongoDB 专为高性能设计,支持快速的插入、查询和更新操作,特别适合处理大规模数据集。
-
索引支持:支持多种索引类型(如单字段索引、复合索引、全文索引、地理位置索引等),能够显著提高查询性能。
-
内存映射文件:使用内存映射文件技术,将数据文件映射到内存中,提高读写速度。
3. 高扩展性
-
水平扩展(Sharding):MongoDB 支持水平扩展,通过将数据分布到多个服务器(分片)上,可以轻松应对海量数据和高并发请求。
-
副本集(Replica Set):支持自动故障转移和数据冗余,确保高可用性和数据一致性。
-
弹性扩展:MongoDB Atlas(云数据库服务)支持自动扩展和按需付费,适合云原生应用。
4. 易用性
-
丰富的查询语言:MongoDB 提供了强大的查询语言,支持复杂的查询操作,如聚合查询、管道操作、分组、排序等。
-
聚合框架:提供了强大的数据处理能力,支持复杂的分析和数据转换任务。
-
多语言支持:支持多种编程语言(如 Python、JavaScript、Java、C++ 等),并提供了丰富的官方驱动程序。
5. 丰富的功能
-
全文搜索:支持全文索引,能够高效处理文本搜索任务。
-
地理位置查询:支持地理位置数据的存储和查询,适用于地理信息系统(GIS)应用。
-
事务支持:从 MongoDB 4.0 开始支持多文档事务,使其在功能上更接近传统关系型数据库。
6. 社区和生态
-
开源社区:MongoDB 是开源软件,拥有庞大的开发者社区,提供了丰富的文档、教程和插件。
-
商业支持:MongoDB Inc. 提供商业版本(MongoDB Enterprise)和云服务(MongoDB Atlas),支持企业级特性(如高级安全功能、备份、监控等)。
-
集成能力:能够与多种工具和框架(如 Node.js、Django、Spring Boot 等)无缝集成。
7. 安全性
-
认证和授权:支持基于角色的访问控制(RBAC),能够细粒度地管理用户权限。
-
数据加密:支持数据加密(如 TLS/SSL)、存储加密和字段级加密,确保数据安全。
-
审计功能:提供审计日志,记录所有关键操作,便于安全监控和合规性检查。
8. 云原生支持
-
MongoDB Atlas:MongoDB 的云数据库服务,支持自动扩展、备份、监控和高可用性。
-
Kubernetes 集成:支持在 Kubernetes 环境中运行,提供云原生的部署和管理能力。
三.mongodb的基本指令
1. 启动和连接 MongoDB
1.1 启动 MongoDB 服务
在 Linux 或 macOS 上,MongoDB 服务通常通过以下命令启动:
bash复制
mongod
如果需要指定配置文件或数据目录,可以使用以下命令:
bash复制
mongod --config /path/to/mongod.conf
mongod --dbpath /path/to/data
1.2 连接到 MongoDB
使用 MongoDB Shell 连接到数据库:
bash复制
mongo
如果需要连接到远程服务器或指定端口,可以使用以下命令:
bash复制
mongo --host your_server_ip --port your_port
2. 数据库操作
2.1 查看当前数据库
JavaScript复制
db
2.2 切换或创建数据库
JavaScript复制
use database_name
如果数据库不存在,MongoDB 会在插入数据时自动创建它。
2.3 查看所有数据库
JavaScript复制
show dbs
2.4 删除数据库
JavaScript复制
db.dropDatabase()
3. 集合操作
3.1 创建集合
JavaScript复制
db.createCollection("collection_name")
3.2 查看所有集合
JavaScript复制
show collections
3.3 删除集合
JavaScript复制
db.collection_name.drop()
4. 文档操作
4.1 插入文档
JavaScript复制
db.collection_name.insertOne({ field1: "value1", field2: "value2" })
或者插入多个文档:
JavaScript复制
db.collection_name.insertMany([
{ field1: "value1", field2: "value2" },
{ field1: "value3", field2: "value4" }
])
4.2 查询文档
JavaScript复制
db.collection_name.find()
查询特定条件的文档:
JavaScript复制
db.collection_name.find({ field: "value" })
限制查询结果数量:
JavaScript复制
db.collection_name.find().limit(5)
4.3 更新文档
更新单个文档:
JavaScript复制
db.collection_name.updateOne({ field: "value" }, { $set: { newField: "newValue" } })
更新多个文档:
JavaScript复制
db.collection_name.updateMany({ field: "value" }, { $set: { newField: "newValue" } })
4.4 删除文档
删除单个文档:
JavaScript复制
db.collection_name.deleteOne({ field: "value" })
删除多个文档:
JavaScript复制
db.collection_name.deleteMany({ field: "value" })
5. 索引操作
5.1 创建索引
JavaScript复制
db.collection_name.createIndex({ field: 1 }) // 升序索引
db.collection_name.createIndex({ field: -1 }) // 降序索引
5.2 查看索引
JavaScript复制
db.collection_name.getIndexes()
5.3 删除索引
JavaScript复制
db.collection_name.dropIndex("index_name")
6. 聚合操作
MongoDB 提供了强大的聚合框架,用于数据处理和分析。
6.1 简单聚合
JavaScript复制
db.collection_name.aggregate([
{ $match: { field: "value" } }, // 筛选条件
{ $group: { _id: "$field", count: { $sum: 1 } } } // 分组统计
])
6.2 排序和限制
JavaScript复制
db.collection_name.aggregate([
{ $sort: { field: 1 } }, // 升序排序
{ $limit: 5 }
])
7. 复制集和分片
7.1 查看复制集状态
JavaScript复制
rs.status()
7.2 初始化复制集
JavaScript复制
rs.initiate()
7.3 查看分片状态
JavaScript复制
sh.status()
8. 其他常用命令
8.1 查看帮助文档
JavaScript复制
help
8.2 退出 MongoDB Shell
JavaScript复制
exit
8.3 清空集合中的所有文档
JavaScript复制
db.collection_name.remove({})
8.4 查看集合的统计信息
JavaScript复制
db.collection_name.stats()
8.5 查看当前用户的权限
JavaScript复制
db.runCommand({ connectionStatus: 1 })
9. 示例:完整操作流程
假设你已经安装并启动了 MongoDB,以下是一个完整的操作示例:
创建数据库和集合
JavaScript复制
use mydatabase
db.createCollection("users")
插入文档
JavaScript复制
db.users.insertMany([
{ name: "Alice", age: 25, email: "alice@example.com" },
{ name: "Bob", age: 30, email: "bob@example.com" }
])
查询文档
JavaScript复制
db.users.find()
db.users.find({ age: { $gt: 25 } }) // 查询年龄大于 25 的用户
更新文档
JavaScript复制
db.users.updateOne({ name: "Alice" }, { $set: { email: "alice.smith@example.com" } })
删除文档
JavaScript复制
db.users.deleteOne({ name: "Bob" })
删除集合和数据库
JavaScript复制
db.users.drop()
db.dropDatabase()