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

如何使用Gremlin沿路径收集所有顶点和边属性,gremlin,tinkerpop,amazon-neptune,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":[

下面是一个非常简单的查询:

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”)时,响应中确实包含这些属性。

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

g.V('customerId')
你真的应该更喜欢:

g.V('customerId').valueMap('name','age')
在SQL中,这与您可能不会做的事情没有什么不同

SELECT * FROM customer
而是

SELECT name, age FROM customer
至于您的问题,您只需要指定要返回的数据,因此使用
by()
调制器作为
path()

当然,这假设您的
out()
也是一个“客户”,如果不是,只需添加第二个
by()
,其中包含所需的特定字段。
by()
调制器以循环方式应用。如果您希望处理稍微干净一点的JSON,您可以改为使用
project()
like:

g.V('customerId').
  out().
  path().
    by(project('name','age').
         by('name').
         by('age'))
因为这将消除
valueMap()
添加的嵌入列表,从而正确地解释多个属性

> TinkerPop 3.4.4,您也会考虑<代码> EntEngMaP()>步骤,其中包含了图元素的更多结构。

gremlin> g.V().has('person','name','marko').elementMap()
==>[id:1,label:person,name:marko,age:29]
gremlin> g.V().has('person','name','marko').elementMap('name')
==>[id:1,label:person,name:marko]
gremlin> g.V().has('person','name','marko').properties('name').elementMap()
==>[id:0,key:name,value:marko]
gremlin> g.E(11).elementMap()
==>[id:11,label:created,IN:[id:3,label:software],OUT:[id:4,label:person],weight:0.4]

有没有办法将这些数据包含在gList中的顶点或边类型中?您给我的查询添加返回了g:Map中的所有内容。我们希望数据具有某种同质性,这样我们的输出就可以有一些一致性,从而实现一个干燥的JSON解组器。在返回数据时,您应该查看标准集合。这又回到了我的观点,即在你返回的内容中要明确。没有图形元素的“部分”概念(即返回一个只包含一些属性的
顶点
),正如您在查询中看到的,我们将“分离”该顶点,这样您得到的只是id/标签。我们将顶点的形式称为“引用”顶点,在未来,TinkerPop将返回所有遍历(已经在某些图形实现和TinkerPop serializers中工作的方式)。如果你想知道为什么我们认为“全”顶点“坏”,那么你必须考虑多属性。假设一个顶点上有一百万个属性,而您意外地在
路径()
中返回了未过滤的属性-这将是一个代价高昂的序列化日,以返回resultAlright。很公平。谢谢你向我解释。我还有一个问题:如何在“项目(…)”中添加顶点ID?我试着只添加一个参数“id”,但似乎不起作用。根据我们的实现,将映射解组到顶点属性中非常简单,但是如果没有主键,我无法识别映射属性所指的顶点。如果静态导入了
t
,它只是
by(t.id)
,或者干脆
by(id)
gremlin> g.V().has('person','name','marko').elementMap()
==>[id:1,label:person,name:marko,age:29]
gremlin> g.V().has('person','name','marko').elementMap('name')
==>[id:1,label:person,name:marko]
gremlin> g.V().has('person','name','marko').properties('name').elementMap()
==>[id:0,key:name,value:marko]
gremlin> g.E(11).elementMap()
==>[id:11,label:created,IN:[id:3,label:software],OUT:[id:4,label:person],weight:0.4]