一、基本常用命令1. 数据库相关MongoDB中数据库和集合的创建是“惰性创建lazy creation策略”只有在真正存入数据后才会持久化。查看所有数据库show dbs或show databases切换/创建数据库use 数据库名。若数据库不存在则自动创建但需要后续插入数据才会真正在磁盘中生成。查看当前数据库db删除当前数据库db.dropDatabase()。此操作不可逆需谨慎使用。2. 集合相关创建集合db.createCollection(集合名)。你也可以在插入文档时隐式创建集合这是更常用的方式。查看当前数据库中的所有集合show collections或show tables。删除集合db.集合名.drop()。此操作会永久删除整个集合及其中的所有文档二、增删改查CRUD增插入文档插入单个文档db.集合名.insertOne({文档内容})。db.users.insertOne({ name: 张三, age: 25, city: 上海 })插入多个文档db.集合名.insertMany([{文档1}, {文档2}])。db.users.insertMany([ { name: 李四, age: 30, city: 北京 }, { name: 王五, age: 28, city: 深圳 } ])执行后MongoDB会自动为每个文档生成一个唯一的_id字段作为主键。删删除文档删除匹配的第一个文档db.集合名.deleteOne({条件})。db.users.deleteOne({ name: 张三 })删除所有匹配的文档db.集合名.deleteMany({条件})。如果条件为空对象{}则会删除集合中的所有文档。db.users.deleteMany({ age: { $lt: 25 } }) // 删除所有年龄小于25岁的用户改修改文档更新单个文档db.集合名.updateOne({筛选条件}, {更新操作})。更新多个文档db.集合名.updateMany({筛选条件}, {更新操作})。替换整个文档db.集合名.replaceOne({筛选条件}, {新文档内容})。最常用的更新操作符$set只更新指定的字段其他字段保持不变。// 更新姓名为李四的文档将其年龄改为31并新增字段status db.users.updateOne( { name: 李四 }, { $set: { age: 31, status: active } } )查查询文档查询所有文档db.集合名.find()。查询第一个匹配的文档db.集合名.findOne({条件})。条件查询在find()中传入筛选条件。投影查询在find()的第二个参数中指定返回哪些字段1表示返回0表示不返回_id默认返回。// 查询年龄为25岁的用户只返回姓名和城市不返回_id db.users.find( { age: 25 }, { name: 1, city: 1, _id: 0 } )三、排序 分页排序db.集合名.find().sort({字段: 1 或 -1})。1 代表升序-1 代表降序。db.users.find().sort({ age: -1 }) // 按年龄降序排列分页limit()用于限制返回的文档数量skip()用于跳过指定数量的文档。db.users.find().skip(0).limit(5) // 第1页每页5条 db.users.find().skip(5).limit(5) // 第2页每页5条注意skip()方法在数据量很大时会导致性能问题因为它需要扫描并跳过前面的所有文档生产环境中应避免跳过大量数据。执行顺序sort()-skip()-limit()无论你在代码中以何种顺序书写。四、聚合查询1. 语法db.集合名.aggregate([{阶段1}, {阶段2}, ...])。聚合管道是一种数据处理方式每个阶段都会对数据进行一次转换然后传递给下一个阶段。常用的管道阶段阶段作用类似SQL中的...$match筛选文档过滤出符合条件的记录WHERE子句$group按指定字段分组并执行聚合计算GROUP BY子句$sort排序ORDER BY子句$limit/$skip分页控制LIMIT/OFFSET$lookup关联查询其他集合左连接LEFT JOIN操作$project指定输出文档中包含哪些字段SELECT子句中的字段列表2. 测试// 查询订单集合筛选出金额大于100的订单并按用户ID分组计算总金额 db.orders.aggregate([ { $match: { amount: { $gt: 100 } } }, // 1. 过滤出金额大于100的订单 { $group: { _id: $userId, totalAmount: { $sum: $amount } } }, // 2. 按userId分组求和 { $sort: { totalAmount: -1 } } // 3. 按总金额降序排列 ])五、索引1. 简介索引是数据库中一种特殊的数据结构用于快速定位和检索文档可以极大地提高查询性能。它类似于书籍的目录让你无需翻阅整本书就能找到目标内容。2. 语法创建索引db.集合名.createIndex({字段: 排序方向})。1表示升序索引-1表示降序索引。db.users.createIndex({ name: 1 }) // 创建单字段索引 db.users.createIndex({ name: 1, age: -1 }) // 创建复合索引查看索引db.集合名.getIndexes()。用于查看集合上已创建的所有索引。删除索引按名称删除db.集合名.dropIndex(索引名称)删除所有索引保留_id索引db.集合名.dropIndexes()3. 练习假设有一个存储用户信息的users集合你经常需要按email字段查询用户。你可以为email字段创建一个唯一索引db.users.createIndex({ email: 1 }, { unique: true })这样既能加速查询又能保证邮箱地址的唯一性。4. 分析索引 (explain)explain()方法用于分析查询的执行过程是判断查询是否使用了索引、是否存在性能瓶颈的重要工具。db.users.find({ age: { $gt: 18 } }).explain(executionStats)通过返回结果中的winningPlan和executionStats你可以判断查询是否使用了索引以及扫描了多少文档。5. 选择规则为查询条件、排序和聚合操作中频繁出现的字段创建索引。当多个字段经常同时出现在查询条件中时优先创建复合索引一个包含多个字段的索引。对于高基数的字段即取值较多的字段如邮箱地址索引效果更好对于取值较少的字段如性别索引效果有限。可以使用hint()强制MongoDB使用你指定的索引。六、权限机制创建账号语法在admin数据库中使用db.createUser()方法创建用户。db.createUser({ user: 用户名, pwd: 密码, roles: [{ role: 角色名, db: 授权数据库 }] })常用的内置角色包括root超级管理员角色拥有最高权限。readWrite可读写指定数据库。read只读指定数据库。userAdminAnyDatabase可管理所有数据库的用户。开启验证模式重要必须先创建好管理员账号再开启身份验证否则你将无法登录数据库1. 添加超级管理员账号use admin db.createUser({ user: myAdmin, pwd: mySecurePassword, roles: [{ role: root, db: admin }] })创建完成后可以关闭MongoDB服务准备以认证模式重启。2. 卸载服务Windowssc stop MongoDB # 停止服务 sc delete MongoDB # 删除现有服务3. 安装需要身份验证的服务以管理员身份运行CMD进入bin目录后执行# mongod --install --dbpath 数据目录 --logpath 日志目录\日志名称 mongod --install --dbpath D:\MongoDB\mongodb-win32-x86_64-windows-8.2.6\data --logpath D:\MongoDB\mongodb-win32-x86_64-windows-8.2.6\logs\mongodb.log --auth关键点添加了--auth参数表示启用身份验证。4. 启动服务net start MongoDB5.下载 MongoDB Shell注意~MongoDB 从 6.0 版本开始不再默认安装命令行工具mongosh。下载 MongoDB Shell访问 MongoDB 官方下载中心https://www.mongodb.com/try/download/shell。在 Platform 下拉菜单中选择Windows 64-bit (8.1) (MSI)下载 MSI 安装包。使用 MSI 安装包可以省去手动配置环境变量的步骤更便捷。安装 MongoDB Shell运行你下载的 MSI 文件。在安装向导中当出现 Custom Setup 页面时请务必点击Browse...按钮将安装路径设置为你的 MongoDB Server 的bin目录即D:\MongoDB\mongodb-win32-x86_64-windows-8.2.6\bin。这样做的目的是将mongosh.exe和其他 MongoDB 工具放在一起方便管理。继续完成安装。配置环境变量如果安装路径不同如果你在安装时没有选择上面的路径或者你下载的是.zip压缩包则需要手动配置。在 Windows 搜索框输入“环境变量”打开“编辑系统环境变量”。在“系统属性”窗口中点击“环境变量”。在“系统变量”列表中找到并选中Path变量然后点击“编辑”。在编辑窗口中点击“新建”然后添加mongosh的bin文件夹的完整路径例如C:\Program Files\mongosh\bin。如果你在安装时没有修改路径mongosh的默认安装位置通常是C:\Program Files\mongosh\bin。点击“确定”保存所有窗口。验证安装重新打开一个新的命令提示符CMD或 PowerShell 窗口。输入mongosh --version并回车。如果能看到版本信息就说明安装和环境变量都配置成功了。接着输入mongosh并回车即可连接到本地的 MongoDB 数据库。6. 登录测试不提供用户名密码直接登录mongosh此时若执行show dbs会报权限错误因为你未通过验证。7. 通过超级管理员账号登录mongosh --username myAdmin --password mySecurePassword --authenticationDatabase admin成功登录后就可以正常操作数据库了。8.创建一个拥有特定数据库权限的普通用户登录超级管理员账号后为你的应用程序创建一个拥有特定数据库权限的普通用户use myAppDB db.createUser({ user: appUser, pwd: appPassword, roles: [{ role: readWrite, db: myAppDB }] })之后应用程序就可以使用这个受限账号连接数据库实现安全隔离。七、备份还原下载MongoDB数据库工具mongodump和mongorestore是官方提供的备份与恢复工具。下载地址MongoDB官方网站的下载中心找到Database Tools下载对应操作系统版本的压缩包。使用方法解压后将mongodump.exe和mongorestore.exe等工具文件复制到MongoDB的bin目录下即可使用。备份数据库 mongodump备份时不需要停止MongoDB服务它是一个热备份工具。mongodump --out D:\backup\my_backup常用参数--out或-o指定备份文件的输出目录。--db或-d指定要备份的数据库名称。若不指定则备份所有数据库。--collection或-c指定要备份的集合名称。--username/--password如果开启了身份验证需要提供认证信息。mongodump --username myAdmin --password mySecurePassword --authenticationDatabase admin --db myAppDB --out D:\backup\myAppDB还原数据库 mongorestoremongorestore --drop D:\backup\my_backup常用参数--drop在恢复前删除目标数据库中已存在的同名集合确保恢复后的数据与备份时完全一致。--db指定将备份恢复到哪个数据库中。若不指定MongoDB会根据备份文件中记录的元数据进行恢复。--username/--password如果目标数据库开启了身份验证需要提供认证信息。注意mongodump生成的备份文件是二进制的BSON格式保留了数据类型和索引信息因此推荐使用mongorestore进行恢复。mongoexport/mongoimport则用于导出/导入JSON或CSV格式的数据适用于数据迁移或与其他系统交换数据。