gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:53:19 25 4
gpt4 key购买 nike

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

假设我有一个代表特定类型 bolt 的顶点,每个属性代表 bolt 可用的 Material 和成本。

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

我希望能够获得所有塑料 bolt 的 list 及其成本。由于我目前对 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 新手。

最佳答案

如果您只想要 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() 它,只需创建 取而代之的值列表:

gremlin> g.V().map(union(id(),values('name')).fold())
==>[1,marko]
==>[2,vadas]
==>[3,lop]
==>[4,josh]
==>[5,ripple]
==>[6,peter]

如果你想要你呈现的准确输出,你可以使用 group()List 强制转换为 Map:

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 并使用 limit(local,1) 从列表中的第一项获取 Map 的键然后使用 tail(local) 从列表中的第二项中获取值。

当然,我现在想到,如果您的“id”确实是唯一的,那么您可以省略 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') 因为后者会包装结果在 List 中。

关于azure-cosmosdb - 返回键/值列表的 Gremlin 查询,其中键是顶点 ID,值是特定属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54156578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com