MongoDB(5)MongoDB中的数据库(Database)是什么?

在MongoDB中,数据库(Database)是用于组织和管理集合(Collections)及其数据的容器。一个MongoDB实例可以包含多个数据库,每个数据库包含多个集合,每个集合又包含多个文档。数据库用于逻辑上分离数据,并提供独立的命名空间和权限管理。

特点

  1. 独立性:每个数据库是独立的命名空间,可以包含自己的一组集合。
  2. 权限管理:可以针对不同数据库设置不同的访问权限。
  3. 分离逻辑:用于将不同应用或模块的数据逻辑上分离,便于管理和维护。

MongoDB中的数据库操作

下面的示例展示了如何在MongoDB中创建、访问、列出和删除数据库。

1. 创建和访问数据库

在MongoDB中,数据库是在首次使用其中的集合时自动创建的。您可以通过MongoClient连接到MongoDB实例,并选择或创建一个数据库。

javascript 复制代码
const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

async function run() {
    try {
        await client.connect();
        console.log("Connected to MongoDB");

        // 选择数据库,如果数据库不存在则创建
        const db = client.db('exampledb');

        // 创建集合并插入文档
        const collection = db.collection('users');
        const insertResult = await collection.insertOne({
            name: "John Doe",
            email: "john.doe@example.com",
            age: 30
        });

        console.log('Inserted document:', insertResult.ops[0]);
    } finally {
        await client.close();
    }
}

run().catch(console.dir);
2. 列出数据库

可以列出当前MongoDB实例中的所有数据库。

javascript 复制代码
async function listDatabases() {
    try {
        await client.connect();
        const adminDb = client.db().admin();

        // 列出所有数据库
        const databasesList = await adminDb.listDatabases();
        console.log('Databases:');
        databasesList.databases.forEach(db => console.log(` - ${db.name}`));
    } finally {
        await client.close();
    }
}

listDatabases().catch(console.dir);
3. 删除数据库

可以删除一个数据库及其所有集合和文档。

javascript 复制代码
async function dropDatabase() {
    try {
        await client.connect();
        const db = client.db('exampledb');

        // 删除数据库
        const dropResult = await db.dropDatabase();
        console.log('Database dropped:', dropResult);
    } finally {
        await client.close();
    }
}

dropDatabase().catch(console.dir);
4. 数据库中的集合操作

可以在数据库中创建、列出、更新和删除集合。

javascript 复制代码
async function collectionOperations() {
    try {
        await client.connect();
        const db = client.db('exampledb');

        // 创建集合
        const collection = db.collection('products');
        await collection.insertOne({ name: "Laptop", price: 1000 });

        // 列出所有集合
        const collections = await db.listCollections().toArray();
        console.log('Collections:');
        collections.forEach(col => console.log(` - ${col.name}`));

        // 更新集合中的文档
        await collection.updateOne({ name: "Laptop" }, { $set: { price: 900 } });

        // 删除集合
        const dropResult = await collection.drop();
        console.log('Collection dropped:', dropResult);
    } finally {
        await client.close();
    }
}

collectionOperations().catch(console.dir);

高级操作

备份和恢复数据库

可以使用MongoDB的mongodump和mongorestore工具备份和恢复数据库。

备份数据库:

bash 复制代码
mongodump --db exampledb --out /path/to/backup

恢复数据库:

bash 复制代码
mongorestore --db exampledb /path/to/backup/exampledb
数据库权限管理

可以为数据库设置用户和角色,以实现权限管理。

javascript 复制代码
async function createUser() {
    try {
        await client.connect();
        const db = client.db('exampledb');

        // 创建用户并分配角色
        const createUserResult = await db.addUser('exampleUser', 'examplePass', {
            roles: ['readWrite']
        });

        console.log('User created:', createUserResult);
    } finally {
        await client.close();
    }
}

createUser().catch(console.dir);

总结

MongoDB中的数据库是组织和管理集合及其数据的逻辑容器,具备独立性和灵活的权限管理功能。以下是其主要特点和常见操作:

特性 详细说明
独立性 每个数据库是独立的命名空间,包含自己的一组集合
权限管理 可以针对不同数据库设置不同的访问权限
分离逻辑 用于将不同应用或模块的数据逻辑上分离
数据备份与恢复 提供备份和恢复工具,如mongodump和mongorestore
用户和角色管理 可以为数据库创建用户并分配角色和权限
集合操作 支持创建、列出、更新和删除集合

通过实际代码示例,可以直观地了解如何在MongoDB中使用数据库进行数据管理和操作,从而更好地应用于实际项目开发中。

相关推荐
Decay__5 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说9 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场10 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__11 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁12 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk13 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW13 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB13 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_13 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室14 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库