Gremlin 将valueMap与match()一起使用

Gremlin 将valueMap与match()一起使用,gremlin,tinkerpop,janusgraph,gremlin-server,Gremlin,Tinkerpop,Janusgraph,Gremlin Server,我正在调用JanusGraph remote,它默认返回ReferenceVertex。为了检索属性,我使用valueMap(),它适用于简单查询 但是,在我的用例中,我需要构建一个连接,它基于ReferenceVertex运行良好,如下所示: // select t1.table2_ID, t2.table2_ID from table1 as t1 inner join table2 as t2 on t1.table2_ID = t2.table2_ID GraphTraversal&l

我正在调用JanusGraph remote,它默认返回ReferenceVertex。为了检索属性,我使用valueMap(),它适用于简单查询

但是,在我的用例中,我需要构建一个连接,它基于ReferenceVertex运行良好,如下所示:

// select t1.table2_ID, t2.table2_ID from table1 as t1 inner join table2 as t2 on t1.table2_ID = t2.table2_ID

GraphTraversal<?, ?> t1 = __.start().as("table1").out("relatesTo").hasLabel("table2").as("table2");
GraphTraversal<?, ?> t2 = g.V().hasLabel("table1").match(t1).select("table1", "table2");
List<?> l = t2.toList();
// select t1.column1, t2.column2 from table1 as t1 inner join table2 as t2 on p.table2_ID = c.table2_ID

GraphTraversal<?, ?> t1 = __.start().as("table1").out("relatesTo").hasLabel("table2").valueMap(true, "column2").as("table2");
GraphTraversal<?, ?> t2 = g.V().hasLabel("table1").valueMap(true, "column1").match(t1).select("table1", "table2");
List<?> l = t2.toList();
//从表1中选择t1.table2\u ID、t2.table2\u ID作为t1.table2\u ID=t2.table2\u ID上的t1内部联接表2作为t2
GraphTraversal t1=_uuu.start().as(“表1”).out(“relatesTo”).hasLabel(“表2”).as(“表2”);
GraphTraversal t2=g.V().hasLabel(“表1”).match(t1)。选择(“表1”、“表2”);
列表l=t2.toList();
将valueMap添加到遍历以检索属性时失败。我想包括以下特定属性:

// select t1.table2_ID, t2.table2_ID from table1 as t1 inner join table2 as t2 on t1.table2_ID = t2.table2_ID

GraphTraversal<?, ?> t1 = __.start().as("table1").out("relatesTo").hasLabel("table2").as("table2");
GraphTraversal<?, ?> t2 = g.V().hasLabel("table1").match(t1).select("table1", "table2");
List<?> l = t2.toList();
// select t1.column1, t2.column2 from table1 as t1 inner join table2 as t2 on p.table2_ID = c.table2_ID

GraphTraversal<?, ?> t1 = __.start().as("table1").out("relatesTo").hasLabel("table2").valueMap(true, "column2").as("table2");
GraphTraversal<?, ?> t2 = g.V().hasLabel("table1").valueMap(true, "column1").match(t1).select("table1", "table2");
List<?> l = t2.toList();
//从表1中选择t1.column1,t2.column2作为t1内部联接表2作为p.table2\u ID=c.table2\u ID上的t2
GraphTraversal t1=_uuu.start().as(“表1”).out(“relatesTo”).hasLabel(“表2”).valueMap(true,“column2”).as(“表2”);
GraphTraversal t2=g.V().hasLabel(“表1”).valueMap(true,“column1”).match(t1)。选择(“表1”,“表2”);
列表l=t2.toList();
->java.util.HashMap不能强制转换为org.apache.tinkerpop.gremlin.structure.Element

我是否构建了错误的遍历,或者这是Tinkerpop中的一个限制/错误


谢谢

您只需调整
select()
即可将
valueMap()
应用于返回的每一列。下面是一个使用TinkerPop附带的现代玩具图的示例:

gremlin> g.V().as('a').out().as('b').select('a','b').by(valueMap())
==>[a:[name:[marko],age:[29]],b:[name:[lop],lang:[java]]]
==>[a:[name:[marko],age:[29]],b:[name:[vadas],age:[27]]]
==>[a:[name:[marko],age:[29]],b:[name:[josh],age:[32]]]
==>[a:[name:[josh],age:[32]],b:[name:[ripple],lang:[java]]]
==>[a:[name:[josh],age:[32]],b:[name:[lop],lang:[java]]]
==>[a:[name:[peter],age:[35]],b:[name:[lop],lang:[java]]]
因此,在您的情况下,您只需执行以下操作:

GraphTraversal<?, ?> t1 = __.start().as("table1").out("relatesTo").hasLabel("table2").as("table2");
GraphTraversal<?, ?> t2 = g.V().hasLabel("table1").match(t1).select("table1", "table2").by(__.valueMap());
List<?> l = t2.toList();