2016-08-08 70 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

非常感謝! –

相關問題