arangodb:
命名图形
filter边缘文档
多边缘集合
文档集合(也称为顶点集合)
边缘集合(也称为关系集合)
参数:http://blog.youkuaiyun.com/yuzongtao/article/details/76061897
关系的指向:(OUTBOUND:_from→ _to,INBOUND:_from← _to,ANY:_from ←→ _to)
匿名图和命名图区别:匿名图不具有描述哪个顶点集合通过哪个边集合连接的边定义
只想遍历特定类型的边:两种方式
第一种方式(将对每条edges进行比较[cpu占用率较高]):
边缘文档中的属性-即type FILTER e.type = "friends"
第二种方式(某种情况下效率更高):
例子:
所有扮演“电影1”或“电影2”的演员
db._query("FOR x IN ANY 'movies/TheMatrix' actsIn OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN x._id").toArray();
db._query("FOR x IN UNION_DISTINCT (
(FOR y IN ANY 'movies/TheMatrix' actsIn OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN y._id),
(FOR y IN ANY 'movies/TheDevilsAdvocate' actsIn OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN y._id))
RETURN x").toArray();
所有在“电影1”和“电影2”中扮演角色的演员?
db._query("FOR x IN INTERSECTION (
(FOR y IN ANY 'movies/TheMatrix' actsIn OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN y._id),
(FOR y IN ANY 'movies/TheDevilsAdvocate' actsIn OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN y._id))
RETURN x").toArray();
“actor1”和“actor2”之间的所有常见电影?
db._query("FOR x IN INTERSECTION (
(FOR y IN ANY 'actors/Hugo' actsIn OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN y._id),
(FOR y IN ANY 'actors/Keanu' actsIn OPTIONS {bfs: true, uniqueVertices: 'global'} RETURN y._id))
RETURN x").toArray();
所有在3部或更多电影中演出的演员?
db._query("FOR x IN actsIn COLLECT actor = x._from WITH COUNT INTO counter FILTER counter >= 3 RETURN {actor: actor, movies: counter}").toArray();
所有有6个演员参演的电影?
db._query("FOR x IN actsIn COLLECT movie = x._to WITH COUNT INTO counter FILTER counter == 6 RETURN movie").toArray();
电影演员人数?
db._query("FOR x IN actsIn COLLECT movie = x._to WITH COUNT INTO counter RETURN {movie: movie, actors: counter}").toArray()
演员的电影数量?
db._query("FOR x IN actsIn COLLECT actor = x._from WITH COUNT INTO counter RETURN {actor: actor, movies: counter}").toArray();
演员在2005年至2010年之间演出的电影数量?
该查询是多模型数据库实际发光的位置。首先我们希望在生产中使用它,所以我们在一年中设置了skiplistindex。这允许执行2005至2010年之间的快速范围查询。
db.actsIn.ensureSkiplist("year")
db._query("FOR x IN actsIn FILTER x.year >= 1990 && x.year <= 1995 COLLECT actor = x._from WITH COUNT INTO counter
RETURN {actor: actor, movies: counter}").toArray()
图函数:
从边缘获取顶点:graph._fromVertex(edgeId)
获取顶点到边的:graph._toVertex(edgeId)
_neighbors(获取示例定义的顶点的所有邻居):graph._neighbors(vertexExample, options)
direction:边缘的方向。可能的值是OUTBOUND,INBOUND和ANY(默认)。
edgeExamples:过滤边缘,请参阅示例的定义
neighborExamples:过滤邻居顶点,请参阅示例的定义
edgeCollectionRestriction:一个或一列边缘集合名称,应被视为在路径上。
vertexCollectionRestriction:一个或一系列顶点集合名称,应在中间顶点步骤中考虑。
minDepth:定义到邻居的最小中间步数(默认值为1)。
maxDepth:定义到邻居的最大中间步数(默认值为1)。
_commonNeighbors(获取示例定义的顶点的所有常见邻居): graph._commonNeighbors(vertex1Example, vertex2Examples, optionsVertex1, optionsVertex2)
_countCommonNeighbors(获取示例定义的顶点的公共邻居数量): graph._countCommonNeighbors(vertex1Example, vertex2Examples, optionsVertex1, optionsVertex2)
_commonProperties(获取共享公共属性的图的顶点): graph._commonProperties(vertex1Example, vertex2Examples, options)
_countCommonProperties(获取共享公共属性的图的顶点数量):graph._countCommonProperties(vertex1Example, vertex2Examples, options)
_paths(_paths函数返回图的所有路径):
direction:边缘的方向。可能的值是any, inbound和outbound(默认)。
followCycles(可选):如果设置为true,则查询会在图中显示循环,默认为false。
minLength(可选):定义路径必须返回的最小长度(默认值为0)。
maxLength(可选):定义路径必须返回的最大长度(默认值为10)
_最短的路径:graph._shortestPath(startVertexExample, endVertexExample, options)
direction:边缘的方向为一个字符串。可能的值是outbound,inbound和any(默认)。
edgeCollectionRestriction:一个或多个边缘集合名称。只有来自这些集合的边缘才会被视为路径。
startVertexCollectionRestriction:一个或多个顶点集合名称。只有来自这些集合的顶点才会被视为路径的起始顶点。
endVertexCollectionRestriction:一个或多个顶点集合名称。只有来自这些集合的顶点才会被视为路径的结束顶点。
weight:包含长度的边的属性的名称作为字符串。
defaultWeight:仅用于选项权重。如果一个边没有名称为定义在选项权重中的属性,则此默认值将用作长度。如果未提供默认值,则默认值为正无穷大,因此路径无法计算
_distanceTo(返回图中的所有路径和距离):
graph._distanceTo(startVertexExample, endVertexExample, options) 这个函数是graph._shortestPath的一个包装。它不会返回实际路径,而只会返回两个顶点之间的距离