【发布时间】:2019-01-15 23:55:02
【问题描述】:
我正在尝试更新一个顶点及其所有子节点。我不确定它为什么会超时。
v = g.V().has('a', 'id', '1').next()"
"v.property('status', '0')"
"g.V(v).out('e').repeat(property('status', '0'))"
【问题讨论】:
标签: graph cassandra datastax gremlin
我正在尝试更新一个顶点及其所有子节点。我不确定它为什么会超时。
v = g.V().has('a', 'id', '1').next()"
"v.property('status', '0')"
"g.V(v).out('e').repeat(property('status', '0'))"
【问题讨论】:
标签: graph cassandra datastax gremlin
我假设您想用“0”的“状态”更新顶点及其所有子节点,如果是这样,那么您只需要这样做:
g.V().has('a','id','1')
property('status','0').
repeat(out('e').property('status','0'))
至于为什么它可能会超时,您可能会更仔细地查看您的数据,看看您是否在某个地方有一个循环(即,一个孩子是否以某种方式指向祖先?)。我还会考虑用until() 或times() 设置一个限制,看看你是否能找出遍历的深度。
【讨论】:
g.V().repeat(__()) 从技术上讲是一个无限循环 - 你在遍历中有点像你只是在无休止地更新同一个顶点上的属性。
property() 的调用,因此第一个子顶点命中 repeat() 并无休止地更新该顶点上的“状态”属性,并且因为 property() 只是返回相同的顶点一次又一次地送回repeat()循环。
out('e') 移动到repeat() 中的——这是最大的不同。 repeat() 在遍历到最后一个孩子并且循环结束后,实际上已经没有地方可去。 g.V().repeat(sideEffect{println(it.get().id() + " " + it.loops)}) 与 TinkerGraph 会很容易地向您展示无限循环。