修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Blaze (v4)

Standalone

Please complete this required field.

Please complete this required field.

Please complete this required field.

Please complete this required field.

如果不需要 HDC 服务,则此项留空。

Please complete this required field.

如果不需要 HDC 服务,则此项留空。

Please complete this required field.

Please complete this required field.

所有服务器的MAC地址,由换行符或逗号分隔。

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
Shard 服务最大数量
Shard 服务最大总核数
HDC 服务最大数量
HDC 服务最大总核数
申请天数
审批日期
过期日期
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

v4.5
搜索
    v4.5

      路径模板

      概述

      路径模板子句n().e()...n()使用点边模板组装路径后进行路径查询,支持过滤路径中的点和边、剔除带环路的结果、限制查询的结果数量等。

      语法

      • 子句别名:支持,数据类型为PATH
      • 支持前缀OPTIONAL:若无查询结果,子句返回一条点和边均null的一步路径,即null-[null]-null
      • 参数:
      参数
      类型 规范 必须携带
      描述
      参数别名
      no_circle() / / 剔除含有环路的路径;有关嬴图中环路的定义,可参考术语解释 不支持
      limit() int ≥-1 子句每次执行时返回的结果数量,-1表示返回所有 不支持

      示例

      示例图集一

      在一个空图集中,依次运行以下各行语句创建示例图集:

      create().node_schema("country").node_schema("movie").node_schema("director").edge_schema("filmedIn").edge_schema("direct")
      create().node_property(@*, "name")
      insert().into(@country).nodes([{_id:"C001", _uuid:1, name:"France"}, {_id:"C002", _uuid:2, name:"USA"}])
      insert().into(@movie).nodes([{_id:"M001", _uuid:3, name:"Léon"}, {_id:"M002", _uuid:4, name:"The Terminator"}, {_id:"M003", _uuid:5, name:"Avatar"}])
      insert().into(@director).nodes([{_id:"D001", _uuid:6, name:"Luc Besson"}, {_id:"D002", _uuid:7, name:"James Cameron"}])
      insert().into(@filmedIn).edges([{_uuid:1, _from_uuid:3, _to_uuid:1}, {_uuid:2, _from_uuid:4, _to_uuid:1}, {_uuid:3, _from_uuid:3, _to_uuid:2}, {_uuid:4, _from_uuid:4, _to_uuid:2}, {_uuid:5, _from_uuid:5, _to_uuid:2}])
      insert().into(@direct).edges([{_uuid:6, _from_uuid:6, _to_uuid:3}, {_uuid:7, _from_uuid:7, _to_uuid:4}, {_uuid:8, _from_uuid:7, _to_uuid:5}])
      

      使用单点、单边模板

      本例查找单点路径,要求只包含@movie点,返回点的全部信息:

      n({@movie}) as p
      return p{*}
      

      Léon
      Avatar
      The Terminator
      

      本例查找4步路径,按顺序单独规定其中5个点和4条边的schema以及边的方向,返回路径中点和边的全部信息:

      n({@movie}).re({@filmedIn}).n({@country})
        .le({@filmedIn}).n({@movie})
        .le({@direct}).n({@director})
        .re({@direct}).n({@movie}) as p
      return p{*}
      

      Léon ----> France <---- The Terminator <---- James Cameron ----> Avatar
      Léon ----> USA <---- The Terminator <---- James Cameron ----> Avatar
      Léon ----> USA <---- Avatar <---- James Cameron ----> The Terminator
      The Terminator ----> USA <---- Avatar <---- James Cameron ----> The Terminator
      Avatar ----> USA <---- The Terminator <---- James Cameron ----> Avatar
      

      使用多边模板

      本例查找从电影Léon到电影Avatar的1~4步路径,返回路径中点和边的全部信息:

      n({@movie.name == "Léon"}).e()[:4].n({@movie.name == "Avatar"}) as p
      return p{*}
      

      Léon ----> France <---- The Terminator ----> USA <---- Avatar
      Léon ----> France <---- The Terminator <---- James Cameron ----> Avatar
      Léon ----> USA <---- The Terminator <---- James Cameron ----> Avatar
      Léon ----> USA <---- Avatar
      

      使用多边多点模板

      查找从电影Léon到电影Avatar的1~4步路径,要求中间不经过France这个国家点,返回路径中点和边的全部信息:

      n({@movie.name == "Léon"}).e().nf({name != "France"})[:4].n({@movie.name == "Avatar"}) as p
      return p{*}
      

      Léon ----> USA <---- The Terminator <---- James Cameron ----> Avatar
      Léon ----> USA <---- Avatar
      

      无权重最短路径

      本例查找从电影Léon到电影Avatar的4步内最短路径,返回路径中点和边的全部信息:

      n({@movie.name == "Léon"}).e()[*:4].n({@movie.name == "Avatar"}) as p
      return p{*}
      

      Léon ----> USA <---- Avatar
      

      表示最短路径的多边模板e()[*:N]e().nf()[*:N]必须是路径中的最后一个边模板。

      闭环路径

      本例查找4步路径,按顺序单独规定其中前4个点和4条边的schema以及边的方向,要求第5个点与第1个点一样(即路径形成闭环),返回路径中点和边的全部信息:

      n({@movie} as a).re({@filmedIn}).n({@country})
        .le({@filmedIn}).n({@movie})
        .le({@direct}).n({@director})
        .re({@direct}).n(a) as p
      return p{*}
      

      The Terminator ----> USA <---- Avatar <---- James Cameron ----> The Terminator
      Avatar ----> USA <---- The Terminator <---- James Cameron ----> Avatar
      

      剔除带有环路的路径

      本例查找4步路径,按顺序单独规定其中5个点和4条边的schema以及边的方向,要求剔除带环路的路径,返回路径中点和边的全部信息:

      n({@movie}).re({@filmedIn}).n({@country})
        .le({@filmedIn}).n({@movie})
        .le({@direct}).n({@director})
        .re({@direct}).n({@movie}).no_circle() as p
      return p{*}
      

      Léon ----> France <---- The Terminator <---- James Cameron ----> Avatar
      Léon ----> USA <---- The Terminator <---- James Cameron ----> Avatar
      Léon ----> USA <---- Avatar <---- James Cameron ----> The Terminator
      

      限制查询数量

      本例查找2条4步路径,按顺序单独规定其中5个点和4条边的schema以及边的方向,返回路径中点和边的全部信息:

      n({@movie}).re({@filmedIn}).n({@country})
        .le({@filmedIn}).n({@movie})
        .le({@direct}).n({@director})
        .re({@direct}).n({@movie}).limit(2) as p
      return p{*}
      

      Léon ----> France <---- The Terminator <---- James Cameron ----> Avatar
      Léon ----> USA <---- The Terminator <---- James Cameron ----> Avatar
      

      使用前缀OPTIONAL

      本例查找从导演Luc Besson到电影Avatar的2步路径,返回路径中点和边的全部信息,由于无结果,因此返回null:

      optional n({@director.name == "Luc Besson"}).e()[2].n({@movie.name == "Avatar"}) as p
      return p{*}
      

      null --null-- null --null-- null
      

      如果没有使用前缀OPTIONAL,查询无结果时无返回值。

      示例图集二

      在一个空图集中,依次运行以下各行语句创建示例图集:

      create().node_schema("customer").node_schema("account").edge_schema("has").edge_schema("transfer")
      create().edge_property(@transfer, "time", datetime)
      insert().into(@customer).nodes([{_id:"C001", _uuid:1}])
      insert().into(@account).nodes([{_id:"A001", _uuid:2}, {_id:"A002", _uuid:3}, {_id:"A003", _uuid:4}, {_id:"A004", _uuid:5}])
      insert().into(@has).edges([{_uuid:1, _from_uuid:1, _to_uuid:2}, {_uuid:2, _from_uuid:1, _to_uuid:3}])
      insert().into(@transfer).edges([{_uuid:3, _from_uuid:2, _to_uuid:4, time:"2023-03-01"}, {_uuid:4, _from_uuid:2, _to_uuid:5, time:"2023-04-25"}, {_uuid:5, _from_uuid:4, _to_uuid:5, time:"2023-03-27"}, {_uuid:6, _from_uuid:5, _to_uuid:3, time:"2023-02-15"}])
      

      过滤0步

      本例查找从客户C001的账户向外0~2步的转账路径,返回路径中点和边的全部信息:

      n({_id == "C001"}).re({@has}).n({@account})
        .re({@transfer})[0:2].n({@account}) as p
      return p{*}
      

      C001 ----> A001
      C001 ----> A001 ----> A003
      C001 ----> A001 ----> A003 ----> A004
      C001 ----> A001 ----> A004
      C001 ----> A001 ----> A004 ----> A002
      C001 ----> A002
      

      多边模板e()[0:N]e().nf()[0:N]中0步生效的条件为该模板前后两个单点模板n()的过滤条件相同。此时0步相当于舍弃该多边模板,将其前后的单点视为一个点。

      步间过滤

      本例查找账户间的2步向外转账路径,要求转账边的time属性值递增,返回路径中点和边的全部信息:

      n({@account}).re({@transfer.time > prev_e.time})[2].n({@account}) as p
      return p{*}
      

      A001 ----> A003 ----> A004
      

      边属性@transfer.time需LTE。

      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写