模式

    点用一对括号来描述,通常包含一个名称。例如:

    示例为一个简单的模式,描述了单个点,并使用变量命名该点。

    多点关联模式

    多个点通过边相连是常见的结构,模式用箭头来描述两个点之间的边。例如:

    1. (a)-[]->(b)

    示例为一个简单的数据结构:两个点和一条连接两个点的边,两个点分别为ab,边是有方向的,从ab

    这种描述点和边的方式可以扩展到任意数量的点和边,例如:

    1. (a)-[]->(b)<-[]-(c)

    这样的一系列点和边称为路径(path)。

    只有在涉及某个点时,才需要命名这个点。如果不涉及这个点,则可以省略名称,例如:

    1. (a)-[]->()<-[]-(c)

    Note

    nGQL中的Tag概念与openCypher中的Label有一些不同。例如,必须创建一个之后才能使用它,而且Tag还定义了属性的类型。

    模式除了简单地描述图中的点之外,还可以描述点的Tag。例如:

    1. (a:User)-[]->(b)
    1. (a:User:Admin)-[]->(b)

    openCypher兼容性

    nGQL中的MATCH语句不支持用(a:User:Admin)匹配多个标签。如需匹配多标签可使用过滤条件,如WHERE "User" IN tags(n) AND "Admin" IN tags(n)

    属性模式

    点和边是图的基本结构。nGQL在这两种结构上都可以增加属性,方便实现更丰富的模型。

    在模式中,属性的表示方式为:用花括号括起一些键值对,用英文逗号分隔。例如一个点有两个属性:

    在这个点上可以有一条边是:

    1. (a)-[{blocked: false}]->(b)

    描述一条边最简单的方法是使用箭头连接两个点。

    可以用以下方式描述边以及它的方向性。如果不关心边的方向,可以省略箭头,例如:

      和点一样,边也可以命名。一对方括号用于分隔箭头,变量放在两者之间。例如:

      1. (a)-[r]->(b)

      和点上的Tag一样,边也可以有类型。描述边的类型,例如:

      1. (a)-[r:REL_TYPE]->(b)

      和点上的Tag不同,一条边只能有一种Edge type。但是如果我们想描述多个可选Edge type,可以用管道符号(|)将可选值分开,例如:

      变长模式

      在图中指定边的长度来描述多条边(以及中间的点)组成的一条长路径,不需要使用多个点和边来描述。例如:

      1. (a)-[*2]->(b)

      该模式描述了3点2边组成的图,它们都在一条路径上(长度为2),等价于:

      1. (a)-[]->()-[]->(b)

      也可以指定长度范围,这样的边模式称为variable-length edges,例如:

      1. (a)-[*3..5]->(b)

      *3..5表示最小长度为3,最大长度为5。

      该模式描述了4点3边、5点4边或6点5边组成的图。

      也可以忽略最小长度,只指定最大长度,例如:

        Note

        必须指定最大长度,不支持仅指定最小长度((a)-[*3..]->(b))或都不指定((a)-[*]->(b))。

        一系列连接的点和边称为路径。nGQL允许使用变量来命名路径,例如:

        1. p = (a)-[*3..5]->(b)

        可以在MATCH语句中使用路径变量。