OrientDB图遍历主要通过两种查询语言实现:TRAVERSE
和MATCH
。这两种语言都提供了丰富的函数来满足不同的遍历需求。
TRAVERSE
主要用于对图进行遍历,基于深度搜索算法或者广度搜索算法对图进行有限制的盲目搜索。它返回一个符合遍历条件的子图。TRAVERSE
的语法格式如下:TRAVERSE [class.]field | * | any() | all()
FROM <target>
[MAXDEPTH <number>] | [WHILE <condition>]
[LIMIT <max-records>]
[STRATEGY <strategy>]
TRAVERSE
后可跟9个函数,如out()
, in()
, both()
, oute()
, ine()
, bothE()
, outV()
, inV()
, bothV()
等,用于控制遍历的方向和深度。MATCH
是OrientDB 2.2版本引入的以声明方式的模式匹配语言,主要用于查询图。它和Neo4j的Cypher语言有点像,但目前MATCH
仅支持用于查询。MATCH
的语法格式如下:MATCH { [class: <class>], [as: <alias>], [where: (<whereCondition>)] }
.<functionName>(){ [class: <classname>], [as: <alias>], [where: (<whereCondition>)], [while: (<whileCondition>)], [maxDepth: <number>], [depthAlias: <identifier>], [pathAlias: <identifier>], [optional: (true | false)] }*
RETURN <expression> [AS <alias>] [, [AS]]*
GROUP BY <expression> [, <expression>]*
ORDER BY <expression> [, <expression>]*
SKIP <number>
LIMIT <number>
MATCH
支持out()
, in()
, both()
, oute()
, ine()
, bothE()
, outV()
, inV()
, bothV()
等函数,用于定义连接两个节点的图函数。TRAVERSE out('EdgeClass') FROM (SELECT * FROM Profiles WHERE id = 1)
LIMIT 8
MATCH { [class: Profiles], [as: p], [where: (id = 1)] }
.-outE('EdgeClass')-> { [class: Profiles], [as: p2], [where: (id = 2)] }
RETURN p2.id, p2.name
MATCH
通常用于更复杂的查询,而TRAVERSE
适用于简单的遍历需求。WHERE
子句和LIMIT
来避免无限循环。通过上述教程和示例,您可以更好地理解和应用OrientDB的图遍历功能。