当我以相同的顺序使用values(a,b)传递a,b时,如何获得[ab]作为输出?

时间:2019-06-11 12:37:25

标签: node.js gremlin janusgraph

我正在使用gremlin控制台检查我的查询是否正常运行。我可以获取所需的数据,但顺序相反。 在查询结束时,我正在使用

    values.('id','name').fold()

但是我得到的输出是[name id]。 如何获得作为[id name]的输出? 谢谢。

1 个答案:

答案 0 :(得分:0)

克里姆林宫通常不做任何事情来保留顺序,而是依赖于基础图形数据库提供的顺序。如果需要订单,则需要以某种方式指定订单。我认为您可以使用union()

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).union(values('name'),values('age')).fold()
==>[marko,29]
gremlin> g.V(1).union(values('age'),values('name')).fold()
==>[29,marko]

我不确定依靠union()是否是个好主意。像TinkerGraph应该遵守那里指定的顺序,但是我不确定其他图形是否会。也许更好的解决方案是使用order()进行显式显示:

gremlin> g.V(1).properties('name','age').order().by(key).value()
==>29
==>marko

但这是按字母顺序排序的,而不是您键入它们的顺序。最终,尽管如果您只是验证结果,最好返回带有Map的{​​{1}}

project()

如您所见,gremlin> g.V(1).project('name','age').by('name').by('age') ==>[name:marko,age:29] gremlin> g.V(1).project('age','name').by('age').by('name') ==>[age:29,name:marko] gremlin> g.V(1).project('age','name').by('age').by('name').next().getClass() ==>class java.util.LinkedHashMap 保留project(),因为它使用order()并按定义的顺序执行LinkedHashMap调制器。这样做的好处是,您确实希望在最初的问题中使用您所询问的by()格式,然后就可以从List中获取值了:

Map

希望其中一种方法可以解决您的情况。