【问题标题】:Get vertex properties information in simple format以简单格式获取顶点属性信息
【发布时间】:2017-12-19 05:32:10
【问题描述】:

假设我在图中有两个节点“A”和“B”,每个节点都有“name”(字符串)和“roll-no”(int)属性。如何编写查询以获取以下格式的节点属性信息。请注意,我在输出中不需要数据类型信息和嵌套的 json 结构。

[{name=[apple], roll-no=[10,20]}, {name=[mango], roll-no=[30]}]

我想我在问如何将 GraphSON 转换为普通 JSON。

【问题讨论】:

  • 我正在使用 tinkerpop3。忘记说了。

标签: json gremlin graphson


【解决方案1】:

你可以把project()的元素变成Map

gremlin> g.V(1).project('name','age').by('name').by('age')
==>[name:marko,age:29]

如您所见,采用这种方法可以让您在控制by() 步进调制器中的属性时,控制如何以更细粒度的方式生成贴图。如果返回的顶点没有同质的属性键,您需要以某种方式考虑这一点 - 这是一种可能性:

gremlin> g.V().project('name','age').
......1>   by('name').
......2>   by(coalesce(values('age'),constant('none')))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop,age:none]
==>[name:josh,age:32]
==>[name:ripple,age:none]
==>[name:peter,age:35]

不使用项目,你也可以这样做:

gremlin> g.V().local(properties().group().by(key()).by(value()))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop,lang:java]
==>[name:josh,age:32]
==>[name:ripple,lang:java]
==>[name:peter,age:35]

不像project() 那样清晰,并且会获得通常不鼓励的所有属性,但显然这种方法会起作用。我想您可以按如下方式逐项列出属性:

gremlin> g.V().local(properties('name','age').group().by(key()).by(value()))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop]
==>[name:josh,age:32]
==>[name:ripple]
==>[name:peter,age:35]

【讨论】:

  • 它适用于单个节点,但不适用于多个节点。 g.V().project('name','age').by('name').by('age')
  • 它适用于多个顶点,但您必须考虑可能没有特定属性的顶点。稍微更新了我的答案。
  • project() 很好,如果您需要考虑缺失的属性,否则我只会使用valueMap("name","age")properties(...).group().by(...) 在我看来有点过于复杂了。
  • valueMap() 在这种情况下不起作用。问题是关于摆脱地图中底层的多属性包装。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
相关资源
最近更新 更多