如何在gremlin

时间:2016-11-27 04:54:38

标签: gremlin

我想将a周围的边数与数字进行比较并打印truefalse,如下所示: g.V().out().count()==0 但是==在这里没有工作,它总是返回false。 还有另一种方法吗?

2 个答案:

答案 0 :(得分:3)

最后一个count()步骤返回的是遍历,它提供了一个可用于检索结果的迭代器接口。

如果您的目标是计算图表中所有顶点的所有边缘,返回该单个数字,并将其与0进行比较,这将起作用:

gremlin> g.V().out().count().next()==0
==>false

如果您的目标是在Gremlin语言中与0进行比较,则可以使用is()步骤来测试数字是否相等:

gremlin> g.V().out().count().is(0)
==>v[2]
==>v[3]
==>v[5]

如果要打印布尔结果:

gremlin> g.V().choose(out().count().is(0), constant(true), constant(false))
==>false
==>true
==>true
==>false
==>true
==>false

或者可能返回包含每个顶点及其测试结果的地图?

gremlin> g.V().as('a').choose(out().count().is(0), constant(true), constant(false)).as('b').select('a','b')
==>[a:v[1],b:false]
==>[a:v[2],b:true]
==>[a:v[3],b:true]
==>[a:v[4],b:false]
==>[a:v[5],b:true]
==>[a:v[6],b:false]

答案 1 :(得分:0)

您可以简单地将joins('LEFT JOIN names ON names.user_id = users.id AND names.primary = 1') .joins('LEFT JOIN emails ON emails.user_id = users.id AND emails.primary = 1') .select('users.*, names.first_name AS f_name , emails.email AS user_email, names.last_name AS l_name, names.middle_name AS m_name, ISNULL(names.first_name) AS name_present') .order('name_present, f_name ASC, emails.email ASC') .group('users.id') 链接到.hasNext(),因为它是一个迭代器。

从空白图表开始:

Traversal

让我们添加一个顶点

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices: 0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices: 0 edges:0], standard]
gremlin> g.V().hasNext()
==>false