Groovy Gremlin中对语句进行排序的语法是什么?

Groovy Gremlin中对语句进行排序的语法是什么?,groovy,titan,gremlin,tinkerpop,Groovy,Titan,Gremlin,Tinkerpop,在Gremlin语言(Groovy child)中,我对的行为和用法有点困惑,&& 例如,在GremlinClient REPL(此处运行Titan 1.0)中,我可能希望一次添加几个节点: gremlin> graph = TitanFactory.open("../conf/gremlin-server/titan-cassandra-server.properties") ==>standardtitangraph[cassandra:[localhost]] gremlin&

在Gremlin语言(Groovy child)中,我对
的行为和用法有点困惑
&&

例如,在GremlinClient REPL(此处运行Titan 1.0)中,我可能希望一次添加几个节点:

gremlin> graph = TitanFactory.open("../conf/gremlin-server/titan-cassandra-server.properties")
==>standardtitangraph[cassandra:[localhost]]
gremlin> g = graph.traversal(standard())
==>graphtraversalsource[standardtitangraph[cassandra:[localhost]], standard]
gremlin> g.V().count()
==>0
gremlin> g.addV(label, 'Subject', 'ident', '1') ; g.addV(label, 'Subject', 'ident', '2')
==>v[4304]
gremlin> g.V().count()
==>1
好的,所以
不起作用。那
和&
呢?它没有我想要的语义,但我可以解决它:

gremlin> g.V().count()
==>0
gremlin> g.addV(label, 'Subject', 'ident', '1') && g.addV(label, 'Subject', 'ident', '2')
==>true
gremlin> g.V().count()
==>2
嗯。。。没关系。现在,我还需要能够将变量绑定为命令序列的一部分。奇怪的是,分号在这里起作用:

gremlin> g.V().count()
==>0
gremlin> g.E().count()
==>0
gremlin> g.addV(label, 'Subject', 'ident', '1') && g.addV(label, 'Subject', 'ident', '2')
==>true
gremlin> node3 = graph.addVertex(label, 'Subject', 'ident', '3') ; g.V().has('ident', '1').next().addEdge('dc:isPartOf', node3) ; node3.addEdge('dc:isPartOf', g.V().has('ident','2').next())
==>e[35z-6d4-2l91-9n4][8248-dc:isPartOf->12496]
gremlin> g.V().count()
==>3
gremlin> g.E().count()
==>2

现在是诀窍。如何在一行中执行这两个操作(实际上是一个Websocket请求)?我甚至不能通过
复制上面的
node3=…
并获得适当的功能。

除非您特别提到,否则Gremlin是纯Groovy,因为Gremlin是DSL而不是语言本身。从技术上讲,任何有效的Groovy都是有效的Gremlin

关于您提供的示例,我相信您需要通过
.iterate()
.next()
可以工作,因为您只添加了一个元素)

Gremlin控制台只自动迭代最后一次遍历,因此第二条语句不需要显式的
.iterate()
。这严格等同于:

g.addV(label, 'Subject', 'ident', '1').iterate() ; g.addV(label, 'Subject', 'ident', '2').iterate()
如果希望通过WebSocket执行多个操作,只需发送多行脚本即可。以下方面应起作用:

node3 = graph.addVertex(label, 'Subject', 'ident', '3')
g.V().has('ident', '1').next().addEdge('dc:isPartOf', node3)
node3.addEdge('dc:isPartOf', g.V().has('ident','2').next())
请注意,使用TinkerPop的最新版本(我记得是v3.1+),您可以链接
.addV()
步骤,并在同一遍历中添加多个顶点

g.addV(label, 'Subject', 'ident', '1').addV(label, 'Subject', 'ident', '2')

这在Titan中还不可用,因为最新的稳定版本(v1.0.0)使用TinkerPop v3.0.1。

“迭代你的遍历”每次都会吸引人。另请参见:-注意,在Tinkerpop2.x中,Gremlin是一个“groovy”。对于TinkerPop 3.x,我真的不会再对它施加限制了。非常感谢!
g.addV(label, 'Subject', 'ident', '1').addV(label, 'Subject', 'ident', '2')