修改密码

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

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
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

搜索
    中文

      路径模板

      命令、参数

      用基础模板组装成路径并进行查询,可以对路径中的每个点、边进行过滤、对环路进行去除,比此前介绍的 AB 路径查询、K 邻居查询等更为灵活。

      语法:

      • 命令:无
      • 必选参数:基础模板
      • 其他参数:(见下表)
      • 语句别名类型:PATH
      参数 类型 规范 描述 参数别名类型
      no_circle() / / 不返回含有环路成分的路径,环路成分的定义可参见《背景知识》中的术语介绍 不支持自定义别名
      limit() int -1 或 >=0 模板路径查询单次执行时返回结果的条数,-1 表示返回所有结果 不支持自定义别名

      路径模板支持使用前缀 optional,此时如果查询结果为空,则返回一条伪路径 0-0-...-0,即路径上的所有点、边 UUID 均为 0。

      1 步查询

      示例:参考下图所示的路径结构,查询某顾客的银行卡给另一个顾客的银行卡转账的行为,返回 10 条结果并携带全部信息

      n({@customer}).re({@has}).n({@card})
        .re({@transfer}).n({@card})
        .le({@has}).n({@customer}) as p
      limit 10 
      return p{*}
      

      N 步查询

      示例:参考下图所示的路径结构,查询顾客 CU001 的银行卡向外 3 步转账的路径,返回 10 条结果并携带全部信息

      n({_id == "CU001"}).re({@has}).n({@card})
        .re({@transfer})[3].n({@card}) as p
      limit 10 
      return p{*}
      

      1~N 步查询

      示例:查询顾客 CU001 的银行卡向外 1~3 步转账的路径,返回 10 条结果并携带全部信息

      n({_id == "CU001"}).re({@has}).n({@card})
        .re({@transfer})[:3].n({@card})
        .le({@has}).n({@customer}) as p
      limit 10 
      return p{*}
      

      M~N 步查询

      示例:查询顾客 CU001 的银行卡向外 2~3 步转账的路径,返回 10 条结果并携带全部信息

      n({_id == "CU001"}).re({@has}).n({@card})
        .re({@transfer})[2:3].n({@card})
        .le({@has}).n({@customer}) as p
      limit 10 
      return p{*}
      

      无权重最短路径查询

      示例:参考下图所示的路径结构,查询由顾客 CU001 向顾客 CU002 转账的 3 步以内的最短路径,返回 10 条结果并携带全部信息

      n({_id == "CU001"}).re({@has}).n({@card} as n1)
      n({_id == "CU002"}).re({@has}).n({@card} as n2)
      with n1, n2
      n(n1).re({@transfer})[*:3].n(n2) as p 
      limit 10
      return p{*}
      

      分析:本例先使用两个模板路径查询分别找到 CU001 和 CU002 两个顾客的银行卡,再用此二人的银行卡作为转账路径的起点、终点进行最短路径查询。

      环路查询

      示例:参考下图所示的路径结构,查询顾客 CU001 的银行卡参与的 4 步之内的单一方向转账环路,返回 10 条结果并携带全部信息

      n({_id == "CU001"}).re({@has}).n({@card} as n)
        .re({@transfer})[:4].n(n) as p
      limit 10
      return p{*}
      

      去除环路查询

      示例:查询顾客 CU001 的银行卡参与的 4 步之内的单一方向转账路径,去除环路,返回 10 条结果并携带全部信息

      n({_id == "CU001"}).re({@has}).n({@card})
        .re({@transfer})[:4].n({@card})
        .no_circle() as p
      limit 10
      return p{*}
      

      单次查询数量限制

      示例:查找从银行卡 CA001、CA002、CA005 到银行卡 CA016 的 3 步以内的路径,每组起止点之间返回 2 条路经,携带全部信息

      find().nodes({_id in ["CA001", "CA002", "CA005"]}) as n
      n(n).e()[:3].n({_id == "CA016"})
        .limit(2) as p
      return p{*}
      

      OPTIONAL

      示例:查找从银行卡 CA001、CA002、CA005 到银行卡 CA016 的 3 步以内的路径,每组起止点之间返回 2 条路经,携带全部信息,没有路径则返回伪路径

      find().nodes({_id in ["CA001", "CA002", "CA005"]}) as n
      optional n(n).e()[:3].n({_id == "CA016"})
        .limit(2) as p
      return p{*}
      

      0~N 步查询  4.1 

      示例:查找浏览或购买过商品 P001 的顾客,再到他们 0~2 步的其他顾客,携带全部信息

      n({_id == "P001"}).e().n({@customer})
        .e()[0:2].n({@customer}) as p
      return p{*}
      

      分析:在 0~N 步查询中如果期待 0 步生效,需要该边前后的两个单点模板 n() 中具有相同的过滤条件。

      步间过滤

      示例:查找从银行卡 CA001 到 CA002 的 4 步以内的转出账路径,要求转账时间 time 递增,返回 10 条结果并携带全部信息

      n({_id == "CA001"}).re({@transfer.time > prev_e.time})[:4].n({_id == "CA002"}) as p
      limit 10
      return p{*}
      
      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写