在MongoDB中,数据库(Database)是用于组织和管理集合(Collections)及其数据的容器。一个MongoDB实例可以包含多个数据库,每个数据库包含多个集合,每个集合又包含多个文档。数据库用于逻辑上分离数据,并提供独立的命名空间和权限管理。
特点
- 独立性:每个数据库是独立的命名空间,可以包含自己的一组集合。
- 权限管理:可以针对不同数据库设置不同的访问权限。
- 分离逻辑:用于将不同应用或模块的数据逻辑上分离,便于管理和维护。
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中使用数据库进行数据管理和操作,从而更好地应用于实际项目开发中。