如何使用Gremlin在valueMap中指定要忽略的属性?

时间:2019-10-12 05:41:36

标签: gremlin tinkerpop

我的客户顶点具有4个属性。如果我需要这些属性的地图表示,可以通过执行

g.V('customerId').valueMap('firstName', 'middleName', 'lastName', 'age')

但是,如果我需要地图中除age之外的所有属性,是否可以仅指定被忽略属性的列表?像

g.V('customerId').valueMap(not('age'))

我要避免指定所有必需的属性。

2 个答案:

答案 0 :(得分:2)

没有内置步骤。

您可以通过展开每个地图,过滤不需要的属性(键)并重新对其进行重新组合来实现此目标:

g.V().valueMap().local(unfold()
    .where(select(keys).is(without(["age","prop1","prop2"])))
    .group().by(select(keys)).by(select(values)))

答案 1 :(得分:2)

Kfir提供的答案很好。另一种方法在我的脑海中更加直接,因为您不必先创建一个Map,对其进行解构以进行过滤,然后再将其放回一起:

gremlin> g.V().map(properties().hasKey(without('age')).group().by(key()).by(value()))
==>[name:marko]
==>[name:vadas]
==>[name:lop,lang:java]
==>[name:josh]
==>[name:ripple,lang:java]
==>[name:peter]

这种方法只是将顶点分解为属性,过滤不需要的键,然后从中构造一个Map