代码之家  ›  专栏  ›  技术社区  ›  user1689963

以简单格式获取顶点属性信息

  •  4
  • user1689963  · 技术社区  · 7 年前

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

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

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   stephen mallette    7 年前

    你可以 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]
    

    如果不使用project,您也可以执行以下操作:

    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]
    

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

    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]