Gremlin 递归删除顶点

问题描述 投票:0回答:3

我尝试使用 gremlin 查询删除包含所有子节点的顶点:

g.V()
    .hasId(someId)
    .union(fold().unfold(), repeat(in()).emit())
    .drop()
    .iterate()

不幸的是我收到错误:

org.apache.tinkerpop.gremlin.driver.exception.ResponseException:ID为“someId”的顶点已被删除

但是数据库中存在“someId”!

Java + JanusGraph:

org.janusgraph:janusgraph-driver:0.5.3

org.apache.tinkerpop:gremlin-driver:3.5.0

gremlin janusgraph
3个回答
2
投票

这可能有助于

aggregate(local)
先放下东西,然后再将其移除 - 类似:

g.withSideEffect('x',[] as Set).
  V().hasId(someId).aggregate(local,'x').
  repeat(in()).emit()).aggregate(local,'x').
  cap('x').
  drop()

1
投票

尝试这个查询,它对我来说效果很好:

g.V('SomeDataId').emit().repeat(out()).fold().unfold().drop()

0
投票

如果有人有兴趣,上面提供的解决方案

g.V('SomeDataId').emit().repeat(out()).fold().unfold().drop()

也适用于 ExRam.Gremlinq。这对我来说是这样的:

await g.V<Root>("id")        
    .Cast<Child>()
    .Loop(loop => loop
        .Repeat(__ => __
        .OutE<HasChild>()
        .InV<Child>())
        .Emit()
        .Until(__ => __.Not(_ => _.OutE<HasChild>())))
    .Fold()
    .Unfold()
    .Drop();
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.