2016-08-08 49 views
3

内小鬼语言(Groovy的孩子),我通过;&&行为和用途有点困惑。在Gremlin中对语句进行排序的语法是什么?

例如,在GremlinClient REPL(运行泰坦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 

OK,所以;没有工作。 &&怎么样?它不完全具有我想要的语义,但我可以通过它:

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 = ...行,并获得正确的功能。

回答

4

除非你特别谈到Gremlin language variants,小鬼是纯Groovy的,因为小鬼是DSL,而不是语言本身。从技术上讲,任何有效的Groovy都是有效的Gremlin。

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

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

的小鬼控制台自动遍历而已,所以对于第二条语句明确.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') 

这不是泰坦尚未公布,因为最新的稳定版(V1.0.0)使用TinkerPop有关V3.0.1。

+2

“迭代你穿越”每次抓到人。另请参阅:http://tinkerpop.apache.org/docs/current/tutorials/the-gremlin-console/#result-iteration - 注意,小鬼是TinkerPop有关2.x的一个“常规”对于TinkerPop 3.x,我不会再把这个限制放在它上面了。 –

+0

非常感谢! –