MongoDB 常用命令参考手册
MongoDB 是一种流行的 NoSQL 数据库,因其灵活性和可扩展性,适合处理大量数据。无论你是初学者还是经验丰富的开发者,拥有一个 MongoDB 命令和操作的参考手册可以帮助你更高效地管理数据库。本文将以便捷的速查表格式介绍 MongoDB 的常用命令和操作。
一. 基本命令
1. 显示数据库
show dbs
说明:列出所有数据库。
2. 切换数据库
use databaseName
说明:切换到指定的数据库。
3. 显示集合
show collections
说明:列出当前数据库中的所有集合。
4. 创建集合
db.createCollection("collectionName")
说明:在当前数据库中创建一个新的集合。
二. CRUD 操作
1. 插入文档
db.collectionName.insertOne({})
说明:向集合中插入一个文档。
db.collectionName.insertMany([{}, {}])
说明:向集合中插入多个文档。
2. 查找文档
db.collectionName.find({})
说明:查找符合条件的文档。
db.collectionName.findOne({})
说明:查找符合条件的单个文档。
3. 更新文档
db.collectionName.updateOne({filter}, {$set: {}})
说明:更新符合条件的单个文档。
db.collectionName.updateMany({filter}, {$set: {}})
说明:更新符合条件的多个文档。
4. 查找并更新文档
db.collectionName.findOneAndUpdate({filter}, {$set: {}})
说明:查找并更新单个文档。
5. 查找并删除文档
db.collectionName.findOneAndDelete({filter})
说明:查找并删除单个文档。
6. 查找并替换文档
db.collectionName.findOneAndReplace({filter}, {replacement})
说明:查找并替换单个文档。
7. 批量写入操作
db.collectionName.bulkWrite([
{ insertOne: { document: { key: "value" } } },
{ updateMany: { filter: { key: "value" }, update: { $set: { key: "newValue" } } } },
{ deleteOne: { filter: { key: "value" } } }
])
说明:批量执行插入、更新和删除操作。
8. 删除文档
db.collectionName.deleteOne({filter})
说明:删除符合条件的单个文档。
db.collectionName.deleteMany({filter})
说明:删除符合条件的多个文档。
三. 高级操作
1. 排序文档
db.collectionName.find().sort({key: 1})
说明:按指定字段升序排序文档。
2. 计数文档
db.collectionName.find({}).count()
说明:统计集合中符合条件的文档数量。
3. 重命名集合
db.collectionName.renameCollection("new_coll", true)
说明:将集合重命名为指定名称。
4. 验证集合
db.collectionName.validate({full: true})
说明:验证集合的完整性,包括数据和索引。
5. 获取集合大小信息
db.collectionName.totalSize()
说明:获取集合的总大小。
db.collectionName.totalIndexSize()
说明:获取集合的索引总大小。
db.collectionName.storageSize()
说明:获取集合的存储大小。
四. 索引
1. 创建索引
db.collectionName.createIndex({key: 1})
说明:在指定字段上创建索引。
2. 列出索引
db.collectionName.getIndexes()
说明:列出集合中的所有索引。
3. 删除索引
db.collectionName.dropIndex("indexName")
说明:删除指定的索引。
五. 聚合
1. 聚合管道
db.collectionName.aggregate([
{ $match: {} },
{ $group: {} }
])
说明:使用聚合管道进行数据处理。
六. 复制和分片
1. 检查副本集状态
rs.status()
说明:检查副本集的状态。
2. 初始化副本集
rs.initiate()
说明:初始化副本集。
3. 启用分片
sh.enableSharding("databaseName")
说明:为指定数据库启用分片。
4. 分片集合
sh.shardCollection("databaseName.collectionName", {shardKey: 1})
说明:将集合进行分片。
七. 其他操作
1. 备份数据库
mongodump --db databaseName --out /backup/directory
说明:备份指定数据库。
2. 恢复数据库
mongorestore /backup/directory
说明:从备份目录恢复数据库。
3. 导出集合
mongoexport --collection=collectionName --db=databaseName --out=/export/path/file.json
说明:导出集合的数据到 JSON 文件。
4. 导入集合
mongoimport --collection=collectionName --db=databaseName --file=/import/path/file.json
说明:从 JSON 文件导入数据到集合。
5. 连接 MongoDB
通过 Mongo Shell 连接
mongo --host hostName --port portNumber -u userName -p password --authenticationDatabase admin
说明:通过 Mongo Shell 连接到 MongoDB。
通过 URI 连接
const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb://username:password@host:port/database";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
client.connect(err => {
const collection = client.db("database").collection("collectionName");
// perform actions on the collection object
client.close();
});
说明:通过 URI 连接到 MongoDB,并执行操作。
八. 事务
1. 使用事务
session.startTransaction();
try {
// 执行多个操作
db.collection1.insertOne({ field: value });
db.collection2.updateOne({ filter }, { $set: { field: value } });
// 如果所有操作成功,提交事务
session.commitTransaction();
} catch (error) {
// 如果任何操作失败,回滚事务
session.abortTransaction();
print("Transaction aborted:", error);
}
说明:在副本集中使用事务,确保操作的一致性。
2. 示例
假设我们有两个集合:customers
和 orders
。我们希望在原子操作中更新订单状态并减少产品库存数量。代码如下:
session.startTransaction();
try {
// 更新订单状态
db.orders.updateOne(
{ _id: orderId },
{ $set: { status: "shipped" } }
);
// 减少产品数量
db.products.updateOne(
{ _id: productId },
{ $inc: { quantity: -1 } }
);
// 如果所有操作成功,提交事务
session.commitTransaction();
print("Transaction committed successfully!");
} catch (error) {
// 如果任何操作失败,回滚事务
session.abortTransaction();
print("Transaction aborted:", error);
}
说明:此示例中,如果订单状态更新或产品数量减少失败,整个事务将被回滚,确保数据一致性。
九. 提示
1. 使用 explain()
db.collectionName.find({ key: "value" }).explain("executionStats")
说明:了解查询性能。
2. 避免使用 eval()
说明:出于安全原因,避免使用 db.eval()
。
3. 使用 bulkWrite()
说明:进行批量写入操作时,使用 bulkWrite()
方法。
十. 结论
本 MongoDB 速查表提供了常用命令和操作的快速参考。通过熟悉这些命令,你可以更高效地管理 MongoDB 数据库,优化你的工作流程。