MongoDB 常用命令参考手册

发布:2024-09-13 17:05 阅读:18 点赞:0

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, { useNewUrlParsertrueuseUnifiedTopologytrue });
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 数据库,优化你的工作流程。