如何使用 Gremlin 在 valueMap 中指定要忽略的属性?
How to specify properties to ignore in valueMap with Gremlin?
我的客户顶点有 4 个属性。如果我需要这些属性的地图表示,我可以通过执行
来获取它们
g.V('customerId').valueMap('firstName', 'middleName', 'lastName', 'age')
但是,如果我需要我的地图中除 age
之外的所有属性,有没有办法只指定忽略属性的列表?像
g.V('customerId').valueMap(not('age'))
我想避免指定所有必需的属性。
它没有内置步骤。
您可以通过展开每个地图、过滤不需要的属性(键)并重新组合来实现此目标:
g.V().valueMap().local(unfold()
.where(select(keys).is(without(["age","prop1","prop2"])))
.group().by(select(keys)).by(select(values)))
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
。
我的客户顶点有 4 个属性。如果我需要这些属性的地图表示,我可以通过执行
来获取它们g.V('customerId').valueMap('firstName', 'middleName', 'lastName', 'age')
但是,如果我需要我的地图中除 age
之外的所有属性,有没有办法只指定忽略属性的列表?像
g.V('customerId').valueMap(not('age'))
我想避免指定所有必需的属性。
它没有内置步骤。
您可以通过展开每个地图、过滤不需要的属性(键)并重新组合来实现此目标:
g.V().valueMap().local(unfold()
.where(select(keys).is(without(["age","prop1","prop2"])))
.group().by(select(keys)).by(select(values)))
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
。