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]]
我是图形数据库和 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]]