我正在尝试编写一个Gremlin查询,它将遍历几个顶点,并返回叶子以及一些关于它到达那里所遵循的路径的信息。
用一个例子很容易解释:
# Sample graph diagram
# 1 --> 2* --> 3* --> 4
# \ \---> 5* --> 6
# \-> 7
# Create sample graph
g.addV('V').as('1').property('id','1').property('notable',false)
.addV('V').as('2').property('id','2').property('notable',true)
.addE('E').from('1')
.addV('V').as('3').property('id','3').property('notable',true)
.addE('E').from('2')
.addV('V').as('4').property('id','4').property('notable',false)
.addE('E').from('3')
.addV('V').as('5').property('id','5').property('notable',true)
.addE('E').from('2')
.addV('V').as('6').property('id','6').property('notable',false)
.addE('E').from('5')
.addV('V').as('7').property('id','7').property('notable',false)
.addE('E').from('1')
out()
尽可能使用
as()
.
g.V('1')
.out()
.until(out().count().is(0))
.repeat(
optional(has('notable', true).as("notables"))
.out()
)
.project('Id','NotableAncestors')
.by(id())
.by(coalesce(
select('notables').unfold().id(), inject([])
))
[
{
"Id": "7",
"NotableAncestors": []
},
{
"Id": "4",
"NotableAncestors": ["2", "3"]
},
{
"Id": "6",
"NotableAncestors": ["2", "5"]
}
]
NotableAncestors
作为一个数组,我只得到第一个值,因为
unfold()
,我得到一个数组,但它总是空的。
[
{
"Id": "7",
"NotableAncestors": []
},
{
"Id": "4",
"NotableAncestors": "2"
},
{
"Id": "6",
"NotableAncestors": "2"
}
]