是否可以编写一个带有可变长度模式的Cypher查询,指定起始节点和结束节点之间的节点只能是具有特定属性的节点?
我认为像下面这样的查询将匹配以下所有模式:<-[:REL]-(:Node)
(n:Node {foo:"True"}) <-[:REL]-(:Node {bar:"True"})
(n:Node {foo:"True"}) <-[:REL]-(:Node) <-[:REL]-(:Node {bar:"True"})
(n:Node {foo:"True"}) <-[:REL]-(:Node) <-[:REL]-(:Node) <-[:REL]-(:Node {bar:"True"})
我想象它在(n:Node {foo:"True"})
和<-[:REL]-(:Node {bar:"True"})
查询部分之间“复制”查询的<-[:REL]-(:Node)
部分0到2次,并构造某种类型的匹配UNION。
这是正确的思考方式吗?我如何使变长查询只匹配中间节点具有{bar:"True"}
属性的路径,如下所示:
(n:Node {foo:"True"}) <-[:REL]-(:Node {bar:"True"})
(n:Node {foo:"True"}) <-[:REL]-({bar:"True}) <-[:REL]-(:Node {bar:"True"})
(n:Node {foo:"True"}) <-[:REL]-({bar:"True}) <-[:REL]-({bar:"True}) <-[:REL]-(:Node {bar:"True"})
下面的问题是正确的方法吗?MATCH p=(n:Node {foo:"True"})<-[:REL*0..2]-(:Node {bar:"True"})<-[:REL]-(:Node {bar:"True"})
在我看来,情况并非如此。有人能澄清一下我在思考过程中哪里出错了吗?
2条答案
按热度按时间qltillow1#
我认为如果foo是一个关系属性而不是一个节点属性,这会很容易。
创建一个简单的示例:
我想你应该匹配节点B和c,而不是e,因为我们必须遍历有foo:False的d。
使bar成为关系的属性:
现在您可以写入:
它根据需要返回B和c。
g6baxovj2#