我发现以下代码可以创建edge(如果尚不存在)。
g.V().hasLabel("V1")
.has("userId", userId).as("a")
.V().hasLabel("V1").has("userId", userId2)
.coalesce(
bothE("link").where(outV().as("a")),
addE("link").from("a")
)
它工作正常,但是如果1个查询中不存在顶点和边,我想创建它们。
我尝试用以下代码编写新图,它只是创建新顶点,但它们之间没有关系。
g.V().hasLabel("V1")
.has("userId", userId).fold()
.coalesce(
unfold(),
addV("V1").property("userId", userId1)
).as("a")
.V().hasLabel("V1").has("userId", userId2).fold()
.coalesce(
unfold(),
addV("V1").property("userId", userId2)
)
.coalesce(
bothE("link").where(outV().as("a")),
addE("link").from("a")
)
答案 0 :(得分:3)
感谢JanusGraph google group中的Daniel Kuppitz。我找到了解决方案。我将其重新发布给需要的人。
查询中有两个问题。第一个是它无法按预期运行的原因:fold()步骤。使用fold()会破坏路径历史记录,但是您可以通过在子遍历中进行该操作来轻松解决该问题:
g.V().has("V1","userId", userId1).fold().
coalesce(unfold(),
addV("V1").property("userId", userId1)).as("a").
map(V().has("V1","userId", userId2).fold()).
coalesce(unfold(),
addV("V1").property("userId", userId2))
coalesce(inE("link").where(outV().as("a")),
addE("link").from("a"))
第二个问题是E和outV的结合。您应该使用bothE/otherV
,outE/inV
或inE/outV
。