Gremlin查询,返回键/值列表,其中key是顶点ID,值是特定属性的值

时间:2019-01-12 03:34:41

标签: azure-cosmosdb gremlin

我开始学习图形数据库,并用Gremlin查询语言进行查询以寻求概念证明。

说我有一个顶点,代表一个特定类型的螺栓,每个属性代表一个螺栓可用的材料和成本。

id: bolt-123,
label: part,
properties: [
    { steel : 0.05 },
    { aluminum : 0.02 },
    { iron : 0.03 },
    { plastic : 0.01 }
]

我希望能够获得所有由塑料制成的螺栓及其成本的清单。由于我目前对Gremlin的了解有限,因此我能够提出以下查询:

g.V().hasLabel('part').has('plastic').project('key', 'value').by('id').by('plastic')

结果

[ { "key": "bolt-123", "value": 0.01 },
  { "key": "bolt-456", "value": 0.02 } ]

尽管此查询对我来说非常有意义,但我希望将其简化一些,以便可以:

[ { "bolt-123", 0.01 },
  { "bolt-456", 0.02 } ]

感谢帮助Gremlin新手。

1 个答案:

答案 0 :(得分:2)

如果只需要C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib的值,则可以在遍历的末尾附加Map,它将删除键。我将以“现代”图为例:

select(values)

当然,如果您不需要gremlin> g.V().project('k','v').by(id).by('name').select(values) ==>[1,marko] ==>[2,vadas] ==>[3,lop] ==>[4,josh] ==>[5,ripple] ==>[6,peter] ,那么我一开始就不会为Map烦恼,只需创建值的project()即可:

List

如果您想要显示的确切输出,可以将gremlin> g.V().map(union(id(),values('name')).fold()) ==>[1,marko] ==>[2,vadas] ==>[3,lop] ==>[4,josh] ==>[5,ripple] ==>[6,peter] 强制为ListMap

group()

基本上是从gremlin> g.V(). ......1> map(union(id(),values('name')). ......2> fold(). ......3> group(). ......4> by(limit(local,1)). ......5> by(tail(local))) ==>[1:marko] ==>[2:vadas] ==>[3:lop] ==>[4:josh] ==>[5:ripple] ==>[6:peter] 列表中的第一项中取出每个List,然后从Map中取出limit(local,1)的密钥,然后使用{从列表中的第二项中取出值。 {1}}。

当然,现在我想到的是,如果您的“ id”确实是唯一的,那么您可以省略tail(local)而只需执行union()

group()

请注意,我故意做gremlin> g.V().group().by(id()).by(values('name').unfold()) ==>[1:marko,2:vadas,3:lop,4:josh,5:ripple,6:peter] 而不是by(values('name').unfold()),因为后者会将结果包装在by('name')中。