繁体   English   中英

Cypher 查询:如果它们与特定属性共享关系,则匹配所有节点对

[英]Cypher query: match all the couples of nodes iff they share a relationship with a specific property

我构建了一个非常简单的图,它具有不同类型的节点和一种关系,名为MAPPING1TO1 然后,每对节点共享相同类型的关系。 MAPPING1TO1只有一个属性,名为EventoTag 此属性是一个字符串数组,格式如下: (n,m) ,其中n是三位或两位整数,而m是两位整数。 因此,例如,给定一个泛型关系r ,它的属性EventoTag可能看起来像: (001,11), (002,12), (003,13), ...

我将在 Cypher 中编写一个查询,该查询返回共享满足以下条件的关系的所有节点对:给定输入中的字符串x ,数组属性EventoTag中存在一个字符串,其中包含x作为子字符串。

我尝试使用以下查询解决此问题:

WITH "912" AS event 
MATCH p=(a)-[r]->(b)
WHERE ALL(item in r.EventoTag WHERE SUBSTRING(item,0,4) CONTAINS event)
RETURN p

查询“有效”,但需要太多。 我有不正确的关系,即不满足上述条件。 举个例子,看看下面的结果图像:

在此处输入图片说明

选择的关系是错误的,而其他关系是正确的。 是错误的,因为它不满足条件(它的EventoTag属性不包含子字符串“912”),但仍然在最终结果中被采用,我不明白为什么。

你能帮助我吗? 谢谢你。

这可能是由于 Neo4j 浏览器的特性,它获取查询返回的所有节点,并查找并填充它们之间存在的所有关系(无论您是否返回这些关系)。

从浏览器设置(左下角的齿轮图标)中,滚动到底部并取消选中“连接结果节点”。 如果您重新运行查询,很可能不会返回关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM