我开始学习图形数据库,并用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新手。
答案 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]
强制为List
到Map
:
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')
中。