第二跳可以直接用 变量 v2
这句有点不理解
p=(v)-[e1…2]-(v2) 中 v是指起始点,v2不是指路径的结束点(路径最后的点)吗?那如果v2指的第二跳,那p=(v)-[e1…2]-(v2) 是不是类似于
(v)-[e*]-(v2) 和 (v)-[e*]-(v2) -[e1*]-(v3) 的共同结果
如果路径长度为2,那 v2 不就是第二跳的终点吗?
(v)-[e*1…2]-(v2) 就是 (v)-[e]-(v2) 和 (v)-[e]-()-[e]-(v2) 的共同结果,这个语法不就是这个意思吗?
明白了,谢谢!
- 你们的坑好多啊 ,遍历[r in relationships(p) | startNode(r)] 时startNode拿到的只是一个Id,neo4j中可以拿到vertex,请问我如何在遍历 [r in relationships(p) | r]时拿到startNode和endNode的vertex(带属性的点对象)?
MATCH p=(v:player)<-[e:follow|serve*1..2]-(v2)
where id(v) == 'player100' and v2.player.name=='Tony Parker'
RETURN nodes(p),relationships(p),[r in relationships(p) | startNode(r)];
好的,谢谢!
还是不知道怎么在这个循环里面获取点的属性 [r in relationships(p) | id(startNode(r)) ],能帮我写下吗?
[n in nodes(p)|node.prop]
你这个写法不行啊,我是想对p中的所有边进行过滤
[r in relationships(p) | #在这里有没有办法拿到r的起始点对象? ]
边跟点的属性比较?
我先自己研究一下,谢谢!
大佬,早上好!谢谢你们陪伴我一周多的调研,我总结了一下,还有3,4目标有些问题,能否帮忙解决掉,完成这次的调研工作。
我这次调研的目标,基于 match p=(v)-[e*0..3]-[v2] return p;
1,多tag的属性过滤—已ok
2,多edgeType的属性过滤—已ok
3,指定第几跳的点属性过滤—调研中
如果是某一跳中间点可能会比较复杂
能不能帮忙提供一个例子
4,指定第几跳的边属性过滤—有问题
比如:p1=v1-e1-v2-e2-v3,我通过e[1]排除掉了e2之后,p1路径就没有了,预期是
返回 p1=v1-e1-v2
如果你希望比较第几跳的边和点,可以不用变长 pattern。
MATCH p=(v)-[e1]-(v1)-[e2]-(v2)-[e3]-(v3)
RETURN p
可以直接引用 pattern 中定义的变量做属性过滤,变长 pattern 没有显式定义中间点的变量所以会比较复杂。
边过滤结果有问题,可以去主仓提个 issue,详细描述一下复现过程 https://github.com/vesoft-inc/nebula/issues
好的,谢谢!
- 快收尾了,下面这个查询能对节点进行去重,如何在一个查询中能同时对路径p的节点和边都去重呢?
MATCH p=(v:player{name:"Tim Duncan"})-[e*0..1]-(v2)
WITH nodes(p) AS n
# 提示报错,-1009:SemanticError: Alias `p` not defined
# WITH relationships(p) AS a
UNWIND n AS r
WITH DISTINCT r AS r
RETURN collect(r);
cypher 语法默认的路径模式是 点可以重复边不能重复,你通过变量 e 拿到的边不会有重复。
- 下面的语句报错的:-1009:SemanticError: Alias used but not defined: `e’
- RETURN collect(r),e; 不能同时返回,如何能同时返回呢?
MATCH p=(v:player{name:"Tim Duncan"})-[e*0..1]-(v2)
WITH nodes(p) AS n
UNWIND n AS r
WITH DISTINCT r AS r
RETURN collect(r),e;
MATCH p=(v:player{name:"Tim Duncan"})-[e*0..1]-(v2)
RETURN toSet(nodes(p)), e
好的,非常感谢!