如何使用Gremlin收集沿路径的所有顶点和边缘属性

时间:2018-07-26 20:20:54

标签: gremlin tinkerpop amazon-neptune

这是一个非常简单的查询:

g.V('customerId').out().path()

的JSON输出是

{  
   "requestId":"96b26c1d-d032-2004-d36e-c700bd6db2a2",
   "status":{  
      "message":"",
      "code":200,
      "attributes":{  
         "@type":"g:Map",
         "@value":[  

         ]
      }
   },
   "result":{  
      "data":{  
         "@type":"g:List",
         "@value":[  
            {  
               "@type":"g:Path",
               "@value":{  
                  "labels":{  
                     "@type":"g:List",
                     "@value":[  
                        {  
                           "@type":"g:Set",
                           "@value":[  

                           ]
                        },
                        {  
                           "@type":"g:Set",
                           "@value":[  

                           ]
                        }
                     ]
                  },
                  "objects":{  
                     "@type":"g:List",
                     "@value":[  
                        {  
                           "@type":"g:Vertex",
                           "@value":{  
                              "id":"customerId",
                              "label":"customer"
                           }
                        },
                        {  
                           "@type":"g:Vertex",
                           "@value":{  
                              "id":"e:customerIdemail@email.com",
                              "label":"email"
                           }
                        }
                     ]
                  }
               }
            }
         ]
      },
      "meta":{  
         "@type":"g:Map",
         "@value":[  

         ]
      }
   }
}

现在,客户顶点还包含属性名称和年龄。我想了解的是,如何(如果可能的话)形成我的gremlin查询,以使其嵌套图内的顶点属性。请注意,当我只运行g.V(“ customerId”)时,响应确实包含这些属性。

1 个答案:

答案 0 :(得分:3)

您应始终始终准确指定要在遍历中返回的数据。即使是简单的事情:

g.V('customerId')

您真的应该更喜欢:

g.V('customerId').valueMap('name','age')

在SQL中,您可能不会这么做并没有什么不同

SELECT * FROM customer

但是

SELECT name, age FROM customer

对于您的问题,您只需要指定要返回的数据,因此对by()使用path()调制器:

g.V('customerId').
  out().
  path().
    by(valueMap('name','age'))

这当然假设您的out()也是“客户”,否则,只需添加第二个by()并添加所需的特定字段即可。 by()调制器以循环方式应用。如果您想使用稍微干净一点的JSON,可以改用project(),例如:

g.V('customerId').
  out().
  path().
    by(project('name','age').
         by('name').
         by('age'))

因为这将杀死valueMap()添加的嵌入列表,以正确说明多属性。