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中使用数据库进行数据管理和操作,从而更好地应用于实际项目开发中。

相关推荐
代码丰6 分钟前
大 JSON 放进 Redis 之后,如何用 Stream 解耦耗时任务?
redis·后端·系统架构
武子康1 小时前
手机加语音配件,断开连接后谁来保住这段话?
人工智能·后端·agent
captain3762 小时前
Spring MVC(4)-响应
java·spring boot·后端
武子康2 小时前
Cosmos Curator 总览:从一条样本的组成,选对数据处理入口
人工智能·后端·agent
北冥you鱼3 小时前
Go 语言 CRUD 实战:从接口设计到真实业务场景
开发语言·后端·golang
锋行天下3 小时前
Langgraph 实现类似Langchain记忆上下文过长裁剪
人工智能·后端
YDS8293 小时前
Small Spring IOC篇:作用域和FactoryBean
java·后端·spring
没有气的汽水4 小时前
一次内存缓慢泄漏的排查:每次都 new 一个 OpenAI 客户端,问题出在事件循环上
后端
Nnnnnnn4 小时前
Kafka 踩坑实录:在 WSL2 环境下,容器死活连不上集群怎么办?
后端
就像楞次定律4 小时前
【Linux 学习记之二】C++ 构建体系与底层链接机制的深度透视(1)
linux·后端