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

具有嵌套顶点的Gremlin查询

  •  0
  • Venky  · 技术社区  · 6 年前

    我的用例是: Bag 顶点有边 holds Box 顶点和 顶点有边 contains Fruit 顶点。所以这是3个顶点之间的父子关系。

    id 包括 盒子 再往下到 水果 在类似SQL的语法中,它是一个简单的 select * from bag where id = 1 .

    样本结构:

    g.addV('bag').property('id',1).property('name','bag1').property('size','12').as('1').
      addV('box').property('id',2).property('name','box1').property('width','12').as('2').
      addV('fruit').property('id',3).property('name','apple').property('color','red').as('3').
      addV('bag').property('id',4).property('name','bag2').property('size','44').as('4').
      addV('box').property('id',5).property('name','box2').property('width','14').as('5').
      addV('fruit').property('id',6).property('name','orange').property('color','yellow').as('6').
      addE('holds').from('1').to('2').
      addE('contains').from('2').to('3').
      addE('holds').from('4').to('5').
      addE('contains').from('5').to('6').iterate()
    

    我想得到 1 , 2 3 1 .

    "bags" : [{ "id":"1", "name":"bag1", "size" :"12", "boxes":[ { "id" : "2", "name":"box1", "width" : "12", "fruits": [{ "id":"3", "name" : "apple", "color" : "red" }] }] }, { "id":"4", "name":"bag2", "size" : "44", "boxes":[ { "id" : "5", "name":"box2", "width" : "44", "fruits": [{ "id":"6", "name" : "orange" "color" : "yellow" }] }] }]

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

    我可能会用 project() 为此:

    gremlin> g.V().hasLabel('bag').
    ......1>   project('id', 'name','boxes').
    ......2>     by('id').
    ......3>     by('name').
    ......4>     by(out('holds').
    ......5>        project('id','name','fruits').
    ......6>          by('id').
    ......7>          by('name').
    ......8>          by(out('contains').
    ......9>             project('id','name').
    .....10>               by('id').
    .....11>               by('name').
    .....12>             fold()).
    .....13>        fold())
    ==>[id:1,name:bag1,boxes:[[id:2,name:box1,fruits:[[id:3,name:apple]]]]]
    ==>[id:4,name:bag2,boxes:[[id:5,name:box2,fruits:[[id:6,name:orange]]]]]
    

    我省略了“bags”根级别的键,因为在目录中没有其他键 Map 加上这个额外的等级似乎没有用。