首页 > 解决方案 > Gremlin:如何获取来自顶点的属性“id”?

问题描述

我是新的 Gremlin,并试图仅从示例图中选择几个属性fromto顶点以及顶点的id属性from。这是我创建图表的方式:

g.addV('asset').property(id, 'a1').property('ip', '127.4.8.51').property('scanDate', '2020-09-10').property('repoId', 1)
g.addV('asset').property(id, 'a2').property('ip', '127.4.8.55').property('scanDate', '2020-09-20').property('repoId', 1)
g.addV('asset').property(id, 'a3').property('ip', '127.4.8.57').property('scanDate', '2020-09-21').property('repoId', 1)
g.addV('asset').property(id, 'a4').property('ip', '127.4.10.36').property('scanDate', '2020-09-12').property('repoId', 2)
g.addV('asset').property(id, 'a5').property('ip', '127.4.10.75').property('scanDate', '2020-09-14').property('repoId', 2)
g.addV('repo').property(id, 'r1').property('repoName', 'repo1').property('assetAge', 10).property('repoId', 1)
g.addV('repo').property(id, 'r2').property('repoName', 'repo2').property('assetAge', 9).property('repoId', 2)
g.V('a1').addE('has').to(g.V('r1'))
g.V('a2').addE('has').to(g.V('r1'))
g.V('a3').addE('has').to(g.V('r1'))
g.V('a4').addE('has').to(g.V('r2'))
g.V('a5').addE('has').to(g.V('r2'))

以下是我获得asset.scanDate( fromvertex) 和repo.assetAge( tovertex) 属性的方法:

gremlin> g.V().hasLabel("asset").as("a").out("has").as('b').select('a', 'b').by('scanDate').by('assetAge')
==>{a=2020-09-20, b=10}
==>{a=2020-09-12, b=9}
==>{a=2020-09-21, b=10}
==>{a=2020-09-14, b=9}
==>{a=2020-09-10, b=10}

我希望结果如下所示:

==>{id=a2, scanDate=2020-09-20, assetAge=10}
==>{id=a4, scanDate=2020-09-12, assetAge=9}
==>{id=a3, scanDate=2020-09-21, assetAge=10}
==>{id=a5, scanDate=2020-09-14, assetAge=9}
==>{id=a1, scanDate=2020-09-10, assetAge=10}

任何帮助是极大的赞赏; 谢谢。

标签: gremlingraph-databasestinkerpop

解决方案


您可以使用Gremlin 中的project()步骤完成此操作,如下所示

g.V().
  hasLabel("asset").as("a").
  out("has").
  project('id', 'a', 'b').
    by(select('a').id()).
    by(select('a').values('scanDate')).
    by(values('assetAge'))

推荐阅读