数据库操作 #

一、数据库概述 #

ArangoDB支持多数据库,每个数据库独立存储数据,拥有独立的集合和用户权限。

1.1 系统数据库 #

安装后默认存在 _system 数据库:

text
_system          系统数据库,存储用户和权限信息

1.2 数据库层级 #

text
ArangoDB实例
├── _system(系统数据库)
│   ├── users(用户集合)
│   └── _graphs(图定义)
├── mydb1(用户数据库1)
│   ├── collection1
│   └── collection2
└── mydb2(用户数据库2)
    ├── collection1
    └── collection2

二、创建数据库 #

2.1 Web界面创建 #

  1. 登录ArangoDB Web UI
  2. 点击左侧菜单 “DATABASES”
  3. 点击 “Add Database”
  4. 输入数据库名称
  5. 点击 “Create”

2.2 AQL创建 #

aql
CREATE DATABASE mydb

2.3 带选项创建 #

aql
CREATE DATABASE mydb OPTIONS {
    sharding: "single",
    replicationFactor: 2,
    writeConcern: 2
}

2.4 JavaScript创建 #

javascript
db._createDatabase("mydb");

带选项:

javascript
db._createDatabase("mydb", {
    sharding: "single",
    replicationFactor: 2
});

2.5 创建数据库并设置用户 #

javascript
db._createDatabase("mydb");
require("@arangodb/users").save("myuser", "mypassword", true);
require("@arangodb/users").grantDatabase("myuser", "mydb", "rw");

三、查看数据库 #

3.1 查看所有数据库 #

javascript
db._databases();

输出示例:

json
[
    "_system",
    "mydb",
    "testdb"
]

3.2 查看当前数据库 #

javascript
db._name();

3.3 查看数据库信息 #

javascript
db._properties();

输出示例:

json
{
    "id": "1",
    "name": "_system",
    "isSystem": true,
    "sharding": "single",
    "replicationFactor": 1
}

3.4 AQL查询数据库 #

aql
FOR db IN DATABASES
    RETURN db

四、切换数据库 #

4.1 arangosh切换 #

javascript
db._useDatabase("mydb");

4.2 连接时指定数据库 #

bash
arangosh --server.database mydb

4.3 JavaScript API切换 #

javascript
var db = require("@arangodb").db;
db._useDatabase("mydb");

五、删除数据库 #

5.1 AQL删除 #

aql
DROP DATABASE mydb

5.2 JavaScript删除 #

javascript
db._dropDatabase("mydb");

5.3 删除前检查 #

javascript
if (db._databases().indexOf("mydb") !== -1) {
    db._dropDatabase("mydb");
    print("数据库已删除");
} else {
    print("数据库不存在");
}

5.4 注意事项 #

text
警告:
├── 删除数据库会删除所有数据
├── 不能删除当前正在使用的数据库
├── 不能删除 _system 系统数据库
└── 删除操作不可恢复

六、数据库选项 #

6.1 分片设置 #

javascript
db._createDatabase("sharded_db", {
    sharding: "single"
});

分片选项:

说明
single 单分片(默认)
cluster 集群分片

6.2 复制因子 #

javascript
db._createDatabase("replicated_db", {
    replicationFactor: 3
});

6.3 写关注 #

javascript
db._createDatabase("safe_db", {
    writeConcern: 2
});

6.4 完整选项示例 #

javascript
db._createDatabase("mydb", {
    sharding: "single",
    replicationFactor: 3,
    writeConcern: 2,
    smartGraphs: true
});

七、数据库统计 #

7.1 查看数据库大小 #

javascript
db._statistics();

7.2 查看集合数量 #

javascript
db._collections().length;

7.3 查看所有集合 #

javascript
db._collections();

7.4 查看非系统集合 #

javascript
db._collections().filter(c => !c.properties().isSystem);

八、数据库权限 #

8.1 授权用户访问 #

javascript
require("@arangodb/users").grantDatabase("username", "mydb", "rw");

8.2 权限级别 #

权限 说明
none 无权限
ro 只读
rw 读写

8.3 撤销权限 #

javascript
require("@arangodb/users").revokeDatabase("username", "mydb");

8.4 查看用户权限 #

javascript
require("@arangodb/users").database("username", "mydb");

九、数据库备份 #

9.1 导出数据库 #

bash
arangodump --server.database mydb --output-directory /backup/mydb

9.2 导入数据库 #

bash
arangorestore --server.database mydb --input-directory /backup/mydb

十、实战示例 #

10.1 创建电商数据库 #

javascript
db._createDatabase("ecommerce");

db._useDatabase("ecommerce");

db._create("products");
db._create("users");
db._create("orders");
db._createEdgeCollection("purchased");

10.2 创建博客数据库 #

javascript
db._createDatabase("blog");

db._useDatabase("blog");

db._create("posts");
db._create("comments");
db._create("authors");
db._createEdgeCollection("written_by");
db._createEdgeCollection("comment_on");

10.3 批量创建数据库 #

javascript
["db1", "db2", "db3"].forEach(function(name) {
    if (db._databases().indexOf(name) === -1) {
        db._createDatabase(name);
        print("创建数据库: " + name);
    }
});

十一、常见问题 #

11.1 数据库名称限制 #

text
命名规则:
├── 只能包含字母、数字、下划线
├── 必须以字母开头
├── 长度限制:1-64个字符
├── 区分大小写
└── 不能使用系统保留名

11.2 数据库数量限制 #

text
建议:
├── 单实例:不超过100个数据库
├── 集群:根据硬件资源规划
└── 每个数据库的集合数量:建议不超过1000个

11.3 切换数据库失败 #

javascript
if (db._databases().indexOf("mydb") === -1) {
    print("数据库不存在");
} else {
    db._useDatabase("mydb");
}

十二、总结 #

数据库操作要点:

  1. 创建:CREATE DATABASE 或 db._createDatabase()
  2. 查看:db._databases() 列出所有数据库
  3. 切换:db._useDatabase() 切换数据库
  4. 删除:DROP DATABASE 或 db._dropDatabase()
  5. 权限:grantDatabase() 和 revokeDatabase()

下一步,让我们学习集合操作!

最后更新:2026-03-27