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

Azure cosmosdb 返回键/值列表的Gremlin查询,其中键是顶点ID,值是特定属性的值,azure-cosmosdb,gremlin,Azure Cosmosdb,Gremlin,我开始学习graph数据库,但在使用Gremlin查询语言进行概念验证时遇到了一个小问题 假设我有一个顶点,它表示一种特定类型的螺栓,每个属性表示螺栓可用的材料和成本 id: bolt-123, label: part, properties: [ { steel : 0.05 }, { aluminum : 0.02 }, { iron : 0.03 }, { plastic : 0.01 } ] 我想能够得到所有螺栓和他们的成本,是由塑料制成的清单。根据我目

我开始学习graph数据库,但在使用Gremlin查询语言进行概念验证时遇到了一个小问题

假设我有一个顶点,它表示一种特定类型的螺栓,每个属性表示螺栓可用的材料和成本

id: bolt-123,
label: part,
properties: [
    { steel : 0.05 },
    { aluminum : 0.02 },
    { iron : 0.03 },
    { plastic : 0.01 }
]
我想能够得到所有螺栓和他们的成本,是由塑料制成的清单。根据我目前对小精灵的有限了解,我能够提出以下问题:

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> g.V().project('k','v').by(id).by('name').select(values)
==>[1,marko]
==>[2,vadas]
==>[3,lop]
==>[4,josh]
==>[5,ripple]
==>[6,peter]
当然,如果您不需要
映射
,那么首先我就不需要
project()
它,只需创建值的
列表

gremlin> g.V().map(union(id(),values('name')).fold())
==>[1,marko]
==>[2,vadas]
==>[3,lop]
==>[4,josh]
==>[5,ripple]
==>[6,peter]
如果您想要呈现的确切输出,可以使用
组()将
列表
强制为
映射

它基本上是从每个
列表中获取
映射的键,然后从列表中的第一项中获取
限制(本地,1)
,然后从列表中的第二项中获取
尾部(本地)

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


请注意,我故意按(values('name').unfold())
而不是按('name')
执行
,因为后者将结果包装在一个
列表中

,这当然更接近我想要的(并给我更多的操作来研究),但我希望它是JSON格式的,这样我就可以轻松地将结果反序列化到.NET集合中,而不必循环返回的2D数组。我会继续查找,但有什么想法吗?您可以使用
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]
gremlin> g.V().group().by(id()).by(values('name').unfold())
==>[1:marko,2:vadas,3:lop,4:josh,5:ripple,6:peter]