Mongodb常用命令简介
#作者:Unstopabler
文章目录
- 1、mongodb简介
- 2、主要优势
- 3、典型应用场景
- 4、mongodb操作指南
- 登陆数据库
- 数据库操作
- 集合(表)操作
- 文档(记录)操作
- 索引管理
- 聚合查询
- 用户与权限管理
- 数据备份与恢复
- 服务器管理
1、mongodb简介
MongoDB 是一款开源、跨平台的文档型 NoSQL 数据库系统,由 MongoDB Inc.开发和维护。它的设计目标是为现代应用程序提供一种灵活、高效且易于扩展的数据存储方式。
与传统的关系型数据库不同,MongoDB 以文档(Document)为基本数据存储单元,支持结构灵活的数据格式(如 JSON 或 BSON),非常适合处理非结构化或半结构化的数据。
2、主要优势
MongoDB 作为一款流行的文档型 NoSQL 数据库,具有以下主要优势,使其在现代应用开发中广受青睐:
- 灵活的数据模型(Schema-less)
MongoDB 使用 BSON(Binary JSON)格式存储数据,支持动态、可变的文档结构。
不需要预先定义表结构(schema),可以自由修改字段和嵌套结构,适合快速迭代的开发流程。 - 高性能读写能力
支持内存映射文件,数据读取速度快。
写操作可通过配置不同写关注级别(Write Concern)来平衡性能与可靠性。
对索引的支持丰富(如单字段、复合索引、文本索引等),显著提升查询效率。 - 水平扩展能力强(Sharding)
原生支持分片(Sharding),可将数据分布到多个服务器上,轻松应对 PB 级数据增长。
分布式架构使得系统具备良好的横向扩展能力,适合大数据场景。 - 高可用性(Replica Set)
支持副本集(Replica Set),自动进行故障转移(failover),确保数据的高可用。
主从复制机制保障了数据冗余和读写分离,提升系统的稳定性和容灾能力。 - 丰富的查询语言
提供强大的 CRUD 操作支持,包括条件查询、聚合操作、排序、分页等。
支持嵌套查询、数组操作、地理位置索引等功能,满足复杂业务需求。 - 支持多种索引类型
除了基本的唯一索引、稀疏索引,还支持:
地理空间索引(用于位置服务)
文本索引(用于全文搜索)
TTL 索引(自动过期删除) - 跨平台、多语言支持
可运行于 Windows、Linux、macOS 等各种操作系统。
提供官方驱动支持主流编程语言,如:Java、Python、Node.js、C#、Go、Ruby 等。 - 易于集成与部署
支持与云平台深度集成(如 MongoDB Atlas、AWS、Azure、Google Cloud)。
社区活跃,生态完善,有大量工具和框架支持(如 Mongoose、MongoDB Compass、Robo 3T 等)。 - 适用于非结构化/半结构化数据
特别适合处理日志、JSON 数据、传感器数据、社交媒体内容等非结构化或变化频繁的数据类型。
3、典型应用场景
MongoDB 特别适用于以下场景:
需要快速开发和频繁变更数据结构的应用
处理大规模数据并要求高可扩展性的系统
对性能和实时查询响应有较高要求的服务
凭借其强大的水平扩展能力、丰富的查询语言以及对索引的高效支持,MongoDB 已广泛应用于大数据、云计算和实时 Web 应用等领域。
4、mongodb操作指南
登陆数据库
连接MongoDB服务器 | mongosh --host 127.0.0.1 --port 27017 -u admin -p password --authenticationDatabase admin |
---|---|
连接MongoDB服务器 | /data/mongodb/bin/mongosh 192.168.52.19:27017 use admin db.auth(“admin”,“123456”) |
数据库操作
集合(表)操作
文档(记录)操作
插入文档
# 插入单条文档
db.users.insertOne({name: "supinfo",age: 25,email: "supinfo@supinfo.com",tags: ["developer", "mongodb"]
});# 插入多条文档
db.users.insertMany([{ name: "supinfo", age: 10 },{ name: "hali", age: 20 }
]);
查询文档
# 查询所有文档
db.users.find();# 条件查询(age > 10)
db.users.find({ age: { $gt: 10 } });# 投影(返回指定字段)
db.users.find({}, { name: 1, age: 1 });# 排序(按 age 降序)
db.users.find().sort({ age: -1 });# 分页(跳过前 5 条,限制返回 10 条)
db.users.find().skip(5).limit(10);
更新文档
# 更新单条文档($set 修改字段)
db.users.updateOne({ name: "supinfo" },{ $set: { age: 13, status: "active" } }
);# 更新多条文档($inc 自增字段)
db.users.updateMany({ age: { $lt: 30 } },{ $inc: { age: 1 } }
);# 替换整个文档
db.users.replaceOne({ name: "supinfo" }, { name: "supinfo", role: "admin" });
删除文档
# 删除单条文档
db.users.deleteOne({ name: "supinfo" });# 删除多条文档
db.users.deleteMany({ age: { $gt: 10 } });
索引管理
创建索引
# 单字段索引
db.users.createIndex({ email: 1 }); # 1 为升序,-1 为降序# 复合索引
db.users.createIndex({ name: 1, age: -1 });# 唯一索引
db.users.createIndex({ email: 1 }, { unique: true });#文本索引
db.articles.createIndex({ content: "text" });
查看索引
db.users.getIndexes();
删除索引
db.users.dropIndex("email_1");
聚合查询
聚合查询
# 按 age 分组统计数量
db.users.aggregate([{ $group: { _id: "$age", count: { $sum: 1 } } },{ $sort: { _id: 1 } }
]);# 连接集合(类似 SQL JOIN)
db.orders.aggregate([{$lookup: {from: "users",localField: "user_id",foreignField: "_id",as: "user_info"}}
]);