ArangoDB 社区版的下载地址: https://www.arangodb.com/download-major/
这里我用的是 CentOS7 的操作系统
# 首先上传 ArangoDB 的服务端压缩包,并解压
tar -xf arangodb3-linux-3.9.0.tar
# 为 ArangoDB 配置环境变量
vi /etc/profile
# Ps: 这里我将压缩包解压在了 /root/temp 目录下,用户可以根据自己的解压目录自行更改
#====== 在文件末尾追加 ======
export ARANGO_HOME=/root/temp/arangodb3-linux-3.9.0
export PATH=$PATH:$ARANGO_HOME/bin
#======================
# 使环境变量生效
source /etc/profile
# 查看 ArangoDB 版本查看是否配置成功
arangodb --version
# 单节点启动命令
arangodb --starter.mode single --starter.data-dir /tmp/mydata
# 激活 failover 启动
arangodb --starter.mode activefailover --starter.data-dir /tmp/mydata
# 集群模式启动
arangodb --starter.mode cluster --starter.data-dir /tmp/mydata
Ps: /tmp/mydata 代表的是自定义的数据存储位置
# 上传 ArangoDB 的客户端压缩包,然后解压
tar -xf arangodb3-client-linux-3.9.0.tar
# 进入 ArangoDB 客户端目录
cd arangodb3-client-linux-3.9.0/bin/
# 连接 ArangoDB 数据库(无验证模式)
./arangosh --server.authentication false --server.endpoint tcp://192.168.159.139:8529
# 连接 ArangoDB 数据库(开启验证情况下)
./arangosh --server.username usr --server.password password --server.endpoint tcp://192.168.159.139:8529
Ps:
- ArangoDB 在客户端压缩包里的 bin/ 目录下的所有可执行文件在服务端的压缩包中全部存在,如果是本地服务端安装的话,且已经配备了 ArangoDB 环境变量,则可以直接使用
arangosh
命令,无需安装 ArangoDB 客户端。- ArangoDB 的默认连接端口是
8259
直接在浏览器里输入 http://192.168.159.139:8529/_db/_system/_admin/aardvark/index.html#collections
就可以看到 ArangoDB 的可视化界面
# 创建数据库
db._createDatabase(database-name)
# 展示所有的数据库
db._databases()
# 使用数据库
db._useDatabase(database-name)
# 删除数据库
db._dropDatabase(database-name)
# 创建集合
db._create("Characters")
# 创建边的集合
db._createEdgeCollection("Relations")
# 获取集合 Characters 的信息(可用于获取集合)
db._collection("Characters")
# 获取集合 Characters 的信息(可用于获取集合)
db.Characters
# 列出所有的集合
db._collections()
# 删除集合内所有数据(不删除索引)
db._truncate("Characters")
# 删除集合(连带删除索引)
db._drop("Characters")
使用 db.Characters.properties()
与 db._collection("Characters").properties()
两种方式以直接调用相关方法,接下来主要以db._Collection("Characters")
方式为主。
# 查看集合属性
db._collection("Characters").properties()
# 更改集合属性
db._collection("Characters").properties({ waitForSync : true })
# 重命名集合
db._collection("Characters").rename("Vertex")
# 获取集合统计信息
db._collection("Characters").figures()
# 获取集合的详细统计信息
db._collection("Characters").figures(true)
# 将集合数据加载到内存中
db._collection("Characters").load()
# 存入一个数据
db._collection("Characters").save({"name":"张飞"})
# 插入一条数据
db._collection("Characters").insert({"name":"刘备"})
# 查看集合内有多少个文档
db._collection("Characters").count()
# 返回集合内任意一个文档
db._collection("Characters").any()
# 列出所有的数据
db._collection("Characters").all().toArray()
# 列出集合中的前两个数据
db._collection("Characters").all().limit(2).toArray()
# 按条件查找数据
db._collection("Characters").byExample({"name":"吕布"}).toArray()
# 按条件更新数据
db._collection("Characters").updateByExample({"name":"吕布"},{"name":"赵云"})
# 按条件删除数据
db._collection("Characters").removeByExample( {"name":"赵云"} )
# 依据 id 删除数据
db._collection("Characters").remove("Characters/22040")
# 按照 key 删除多个数据
db._collection("Characters").removeByKeys(["22052","22046"])
# 清空集合内的所有数据
db._collection("Characters").truncate()
# 删除集合
db._collection("Characters").drop()
# 创建顶点集合
db._create("vertex");
# 创建边集合
db._createEdgeCollection("relation");
# 定义图变量
var myGraph = {};
# 插入第一个顶点
myGraph.v1 = db.vertex.insert({ name : "vertex 1" });
# 插入第二个顶点
myGraph.v2 = db.vertex.insert({ name : "vertex 2" });
# 为两个边建立关系(第一个顶点为起点,第二个顶点为重点)
myGraph.e1 = db.relation.insert(myGraph.v1, myGraph.v2,{ label : "knows"});
# 查看边的内容
db._document(myGraph.e1);
# 查看顶点相关的边
db.relation.edges(myGraph.v1._id);
# 查看以某顶点为终点的边
db.relation.inEdges(myGraph.v2._id);
# 查看以某顶点为起点的边
db.relation.inEdges(myGraph.v1._id);
# 执行一条 AQL 语句
db._query(query).toArray()
# 带参数的执行 AQL
db._query(
'FOR c IN @@collection FILTER c._key == @key RETURN c._key',
{ '@collection': 'mycollection', 'key': 'testKey'}).toArray();
# 查看执行计划
db._explain(query, bindParameters)
-- 插入一条记录
INSERT {
"name": "Ned",
"surname": "Stark",
"alive": true,
"age": 41,
"traits": ["A","H","C","N","P"]} INTO Characters
-- 插入多条记录
------------------ 先定义变量 ---------------------
LET data = [
{ "name": "Robert", "surname": "Baratheon", "alive": false, "traits": ["A","H","C"] },
{ "name": "Jaime", "surname": "Lannister", "alive": true, "age": 36, "traits": ["A","F","B"] }
]
------------------ 插入多条数据 ------------------
FOR d IN data
INSERT d INTO Characters
-- 插入边
INSERT { _from: "Characters/robb", _to: "Characters/ned" } INTO ChildOf
数据类型 | 描述 |
---|---|
null | 空值 |
boolean | 布尔类型变量,可选值为 true 和 false |
number | 数值类型,可以为整型数值和浮点数型数值 |
string | 字符串类型 |
array/list | 数组或列表类型 |
object/document | 对象类型数据,也可成为文档类型数据,可用于序列化数据 |
-- 依据 id 更新数据
UPDATE "2861650" WITH { alive: false } IN Characters
-- 更新集合内的所有元素
FOR c IN Characters
UPDATE c WITH { season: 1 } IN Characters
-- 更新整个文档内的内容
REPLACE "2861650" WITH {
name: "Ned",
surname: "Stark",
alive: false,
age: 41,
traits: ["A","H","C","N","P"]} IN Characters
-- 根据 id 删除文档数据
REMOVE "2861650" IN Characters
-- 删除集合内所有的文档
FOR c IN Characters
REMOVE c IN Characters
select --
-- 遍历文档
FOR c IN Characters RETURN c
-- 依据 id 查询文档
RETURN DOCUMENT("Characters/2861650")
-- 依据 id 查询文档
RETURN DOCUMENT("Characters", "2861650")
-- 依据多个 id 查询文档
RETURN DOCUMENT("Characters", ["2861650", "2861653"])
-- 依据多个 id 查询文档
RETURN DOCUMENT(["Characters/2861650", "Characters/2861653"])
-- 查询名称为 Ned 的数据
FOR c IN Characters
FILTER c.name == "Ned"
RETURN c
-- 查询年龄大于13的数据
FOR c IN Characters
FILTER c.age >= 13
RETURN c.name
-- 查询年龄小于 13 的数据并输出指定的属性
FOR c IN Characters
FILTER c.age < 13
RETURN { name: c.name, age: c.age }
-- 多条件查询
FOR c IN Characters
FILTER c.age < 13
FILTER c.age != null
RETURN { name: c.name, age: c.age }
-- 也可用 AND 连接多个查询条件
FOR c IN Characters
FILTER c.age < 13 AND c.age != null
RETURN { name: c.name, age: c.age }
-- 用 or 连接两个查询条件
FOR c IN Characters
FILTER c.name == "Jon" OR c.name == "Joffrey"
RETURN { name: c.name, surname: c.surname }
-- 限制输出5个结果
FOR c IN Characters
LIMIT 5
RETURN c.name
-- 输出第3个开始输出后面5个结果
FOR c IN Characters
LIMIT 2, 5
RETURN c.name
-- 输出结果依据名称排名
FOR c IN Characters
SORT c.name
LIMIT 10
RETURN c.name
-- 按照名称降序排序
FOR c IN Characters
SORT c.name DESC
LIMIT 10
RETURN c.name
-- 依据多个特性进行排名
FOR c IN Characters
FILTER c.surname
SORT c.surname, c.name
LIMIT 10
RETURN {
surname: c.surname,
name: c.name
}
-- 以名为 Joffery 的顶点为出发点,正向遍历,步长为 1~2步,并输出终点节点的名称
FOR c IN Characters
FILTER c.name == "Joffrey"
FOR v IN 1..2 OUTBOUND c ChildOf
RETURN DISTINCT v.name
-- 以名为 Ned 的顶点为出发点,逆向遍历,步长为 1 步,并输出终点节点的名称
FOR c IN Characters
FILTER c.name == "Ned"
FOR v IN 1..1 INBOUND c ChildOf
RETURN v.name