我尝试使用 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
这可能有助于
aggregate(local)
先放下东西,然后再将其移除 - 类似:
g.withSideEffect('x',[] as Set).
V().hasId(someId).aggregate(local,'x').
repeat(in()).emit()).aggregate(local,'x').
cap('x').
drop()
尝试这个查询,它对我来说效果很好:
g.V('SomeDataId').emit().repeat(out()).fold().unfold().drop()
如果有人有兴趣,上面提供的解决方案
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();