Gremlin 使用repeat()和times()一次创建多条边

Gremlin 使用repeat()和times()一次创建多条边,gremlin,Gremlin,如何在重复(..)中使用times()步骤一次创建多个相同的边 g.V().has('Label1', 'id', '1234').repeat(addE('HAS').from(g.V().has('Label2', 'id', '5678'))).times(5) 我认为它将我的边添加到这个顶点上5次,事实上,当times()大于1时,它不会返回任何结果。这是为什么?我该如何正确使用repeat()?我不确定您使用的是什么图形数据库,但我有点惊讶,您没有在这一点上遇到错误,并且该错误应该会

如何在重复(..)中使用times()步骤一次创建多个相同的边

g.V().has('Label1', 'id', '1234').repeat(addE('HAS').from(g.V().has('Label2', 'id', '5678'))).times(5)

我认为它将我的边添加到这个顶点上5次,事实上,当times()大于1时,它不会返回任何结果。这是为什么?我该如何正确使用repeat()?

我不确定您使用的是什么图形数据库,但我有点惊讶,您没有在这一点上遇到错误,并且该错误应该会提示出错误的地方

gremlin> g.V().has('person','name','marko').repeat(addE('knows').from(V().has('person','name','stephen'))).times(5)
org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerEdge cannot be cast to org.apache.tinkerpop.gremlin.structure.Vertex
Type ':help' or ':h' for help.
Display stack trace? [yN]
repeat()
步骤并不是简单地对每个迭代使用相同的输入执行相同的子遍历。它意味着使用上一次迭代的输出作为新输入执行相同的子遍历。这意味着在第一次迭代中,我们初始化了以下子遍历:

addE('knows').from(V().has('person','name','stephen'))
使用“marko”顶点,但该遍历的输出是
(因为
addE()
的输出是
)。在第二次迭代中,该边成为
addE()
的输入,因此……错误……因为您不能在边上调用
addE()

如果您想对这种类型的流控制使用
repeat()
,您可以这样做,但您需要安排子遍历,以便在每次迭代中输入相同的初始顶点:

gremlin> g.addV('person').property('name','marko').addV('person').property('name','stephen').iterate()
gremlin> g.V().has('person','name','marko').as('m').
......1>   V().has('person','name','stephen').as('s').
......2>   repeat(select('m').addE('knows').to('s')).
......3>     times(3).iterate()
gremlin> g.E()
==>e[4][0-knows->2]
==>e[5][0-knows->2]
==>e[6][0-knows->2]

我不确定您使用的是什么图形数据库,但我有点惊讶于您没有在这一点上得到错误,并且该错误应该会产生错误的提示

gremlin> g.V().has('person','name','marko').repeat(addE('knows').from(V().has('person','name','stephen'))).times(5)
org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerEdge cannot be cast to org.apache.tinkerpop.gremlin.structure.Vertex
Type ':help' or ':h' for help.
Display stack trace? [yN]
repeat()
步骤并不是简单地对每个迭代使用相同的输入执行相同的子遍历。它意味着使用上一次迭代的输出作为新输入执行相同的子遍历。这意味着在第一次迭代中,我们初始化了以下子遍历:

addE('knows').from(V().has('person','name','stephen'))
使用“marko”顶点,但该遍历的输出是
(因为
addE()
的输出是
)。在第二次迭代中,该边成为
addE()
的输入,因此……错误……因为您不能在边上调用
addE()

如果您想对这种类型的流控制使用
repeat()
,您可以这样做,但您需要安排子遍历,以便在每次迭代中输入相同的初始顶点:

gremlin> g.addV('person').property('name','marko').addV('person').property('name','stephen').iterate()
gremlin> g.V().has('person','name','marko').as('m').
......1>   V().has('person','name','stephen').as('s').
......2>   repeat(select('m').addE('knows').to('s')).
......3>     times(3).iterate()
gremlin> g.E()
==>e[4][0-knows->2]
==>e[5][0-knows->2]
==>e[6][0-knows->2]

我对repeat()有一个基本的误解,谢谢!我使用的是apache-tinkerpop-gremlin-server-3.4.1,但运行此错误查询时根本没有输出。我对repeat()有一个基本的误解,谢谢!我使用的是apache-tinkerpop-gremlin-server-3.4.1,但在运行这个错误查询时根本没有输出。