ArangoDB AQL
- 插入单条
INSERT {
"name": "Ned",
"surname": "Stark",
"alive": true,
"age": 41,
"traits": ["A","H","C","N","P"]
} INTO Characters
- 插入多条
for d in [
{ "name": "Jaqen", "surname": "H'ghar", "alive": true, "traits": ["H","F","K"] },
{ "name": "Roose", "surname": "Bolton", "alive": true, "traits": ["H","E","F","A"] }]
insert d into Characters
- 根据id查询
RETURN DOCUMENT("Characters/1221")
- 遍历查询+filter+limit+sort
for i in Characters
filter i.name="jone"
sort i.name desc
limit 10,2
return i
- 更新单个属性
UPDATE "2861650" WITH { alive: false } IN Characters
- 替换文档
REPLACE "2861650" WITH {
name: "Ned",
surname: "Stark",
alive: false,
age: 41,
traits: ["A","H","C","N","P"]
} IN Characters
- 删除
REMOVE "1221" in Characters
- Count
for i in airports
Collect
WITH COUNT into number
return {"number":number}
- Collect(group by)
for i in airports
Collect id=i._id
WITH COUNT into number
return {"id":id,number":number}
- Join
For user in Users
for friend in friends
Filter user._key==friend.user
return user
- 图遍历
FOR c IN Characters
FILTER c.name == "Bran"
FOR v IN 1..1 OUTBOUND c ChildOf
RETURN v.name
- 模式匹配
for val,edge,path in 1..1 inbound "Character/1221" ChildOf
Return val
- 最短路径:
For v in outbound shortest_path startVertex to targetVertex Graph graphname [options ...]
或
For v in outbound shortest_path startVertex to targetVertex edges1,edges2... [options ...]
- CONCAT
for i in airports
return concat(i._key,"->",i._id)
- DISTINCT 返回唯一值
- CONCAT_SEPARATOR
FOR v,e,p in 1..6 OUTBOUND id edges Options {uniqueVertices:'path',uniqueEdges:'none'} Filter v.name="111" return CONCAT_SEPARATOR('->',p.vertices[*].name)
图遍历解释
FOR v IN 1..1 OUTBOUND "Characters/1741" ChildOf
OPTIONS {
uniqueVertices:"path",
uniqueEdges:"none"
}
RETURN v.name
以Characters/1741为起点,查询它的outbound方向(child->parent),查找一个深度的距离。
1…1表示是第一层到第一层,表示查找parents
1…2表示第一层到第二层,表示查找parents和groundparents
以此类推;
对于inbound,可以理解为对起点来说是in,也就是指向起点,也就是起点的上游;
对于outbound,同样理解为对起点来说out,也就是起点指向的节点,也就是起点的下游。
Options :
-
bfs:宽度优先 {true,false}
-
dfs:深度优先(默认true)
-
uniqueVertices:{none,path,global},顶点唯一性,path:同一条路径上端点不重复;global:所有路径上端点不重复;none:允许端点重复,默认none
-
uniqueEdges:边唯一性,同上,默认path