问题描述
我有以下查询要检查是否存在边:
g.V("N001").hasLabel("my-type").out("parent").hasId("N002").hasLabel("my-type").limit(1).hasNext()
我也有事后查询插入边不存在:
g.V("N001").hasLabel("my-type").as("a").V("N002").hasLabel("my-type").as("b").addE("parent").from("a").to("b")
我的问题是如何将这两个查询合并为一个查询?
推荐答案
在单个查询中实现这一点的常用配方是fold..coalesce..unfold
模式。在您的查询中,它将类似于:
g.V("N001").hasLabel("my-type").
out("parent").
hasId("N002").hasLabel("my-type").
fold().
coalesce(unfold(), addE('parent').from('N001').to('N002'))
注意ID值是唯一的,可以存在,也可以不存在,如果您知道要查找的ID,则不需要进行标签检查,除非您不确定正在使用的ID是否属于该类型(标签)。
查询将返回现有顶点或新创建的边。当然,如果愿意,您可以编辑查询以返回现有边。