Gremlin 查询语言 - 如何 limit/filter 路径或从链中的特定 Verticle 开始?

Gremlin query language - how to limit/filter path or start from specific verticle in chain?

我是图形数据库和 Gremlin 的新手。 我想要实现的是向数据库提出一个简单的问题。 提供实体的 id 和文件的 id,我想找到所有其他可以通过共享访问此文件的实体,并 return 结果与共享的 属性 “类型”。 这是图表本身:

我尝试了什么:

g.V("Enity:1").out("Created").hasLabel("Share").where(out("Shared").hasId("File:1")).in("Access").path()

这个return是我:

[
  {
    //Omitted empty aray
    "objects": [
      {
        "id": "dseg:/Entity/1",
        "label": "Entity",
        "type": "vertex",
        "properties": {}
      },
      {
        "id": "dseg:/Share/1",
        "label": "Share",
        "type": "vertex",
        "properties": {}
      },
      {
        "id": "dseg:/Entity/1",
        "label": "Entity",
        "type": "vertex",
        "properties": {}
      }
    ]
  },
  {
    //Omitted empty aray
    "objects": [
      {
        "id": "dseg:/Entity/1",
        "label": "Entity",
        "type": "vertex",
        "properties": {}
      },
      {
        "id": "dseg:/Share/1",
        "label": "Share",
        "type": "vertex",
        "properties": {}
      },
      {
        "id": "dseg:/Entity/3",
        "label": "Entity",
        "type": "vertex",
        "properties": {}
      }
    ]
  }
]

它显示了从入口点(Entity:1)到目标实体 2 和 3 的路径

我的 问题 有技术细节:有没有办法在 Entity:1 或我选择的中间 Verticle 之后开始收集 path(),这样我会得到结果只有共享 + 有权访问它的实体?

你只需要告诉路径步骤从哪里开始。 你可以这样做:

gremlin> g.V("entity:1").
......1>   out("Created").
......2>   hasLabel("Share").
......3>   where(out("Shared").hasId("File:1")).as('a').
......4>   in("Access").
......5>   path().from('a').by('Type').by()
==>[RO,v[entity:2]]
==>[RO,v[entity:3]]

另一种方法是:

gremlin> g.V().
......1>   hasLabel('Share').
......2>   where(out('Shared').hasId('File:1')).
......3>   where(__.in('Created').hasId('entity:1')).
......4>   in('Access').
......5>   path().by('Type').by()
==>[RO,v[entity:2]]
==>[RO,v[entity:3]]