Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果属性数大于n,则返回Neo4j中的路径_Neo4j_Cypher - Fatal编程技术网

如果属性数大于n,则返回Neo4j中的路径

如果属性数大于n,则返回Neo4j中的路径,neo4j,cypher,Neo4j,Cypher,我有一个图形数据库,看起来像这样: 唯一有趣的是,SomeProperty可以是“是”或“否” 在顶行中,3个节点中的1个对此属性具有“是” 在最下面一行,所有3个节点对此属性都有一个“是” 我如何编写一个只返回最下面一行的密码查询,通过询问以下问题:哪个子图对于SomeProperty='Yes'有2个或更多的值 这是我的密码: CREATE (person:Person {gender: 'Male', name: 'Albert', SomeProperty: 'Yes'}) CREAT

我有一个图形数据库,看起来像这样:

唯一有趣的是,
SomeProperty
可以是“是”或“否”

在顶行中,3个节点中的1个对此属性具有“是”

在最下面一行,所有3个节点对此属性都有一个“是”

我如何编写一个只返回最下面一行的密码查询,通过询问以下问题:哪个子图对于
SomeProperty
='Yes'有2个或更多的值

这是我的密码:

CREATE (person:Person {gender: 'Male', name: 'Albert', SomeProperty: 'Yes'})
CREATE (person:Person {gender: 'Female', name: 'Annie', SomeProperty: 'Yes'})
CREATE (person:Person {gender: 'Female', name: 'Adrian', SomeProperty: 'No'})

MATCH (a1:Person),(a2:Person)
WHERE a1.name = 'Albert' AND a2.name = 'Annie'
CREATE (a1)-[r:RELATED_TO]->(a2)
SET r.relationship='related'

MATCH (a1:Person),(a2:Person)
WHERE a1.name = 'Annie' AND a2.name = 'Adrian'
CREATE (a1)-[r:RELATED_TO]->(a2)
SET r.relationship='related'

CREATE (person:Person {gender: 'Male', name: 'Bill', SomeProperty: 'Yes'})
CREATE (person:Person {gender: 'Female', name: 'Barb', SomeProperty: 'Yes'})
CREATE (person:Person {gender: 'Male', name: 'Barry', SomeProperty: 'Yes'})

MATCH (a1:Person),(a2:Person)
WHERE a1.name = 'Bill' AND a2.name = 'Barb'
CREATE (a1)-[r:RELATED_TO]->(a2)
SET r.relationship='related'

MATCH (a1:Person),(a2:Person)
WHERE a1.name = 'Barb' AND a2.name = 'Barry'
CREATE (a1)-[r:RELATED_TO]->(a2)
SET r.relationship='related'

我想我有点困惑,因为我不确定一条链可以有多长,如果它总是只有三条,那么我想像这样的东西可能会返回它们

MATCH (p1)-[r1]-(p2)-[r2]-(p3) 
WHERE (a1.SomeProperty ='Yes' AND a2.SomeProperty ='Yes') 
OR (a1.SomeProperty ='Yes' AND a3.SomeProperty ='Yes') 
RETURN a1,a2,a3 
如果可以再长一点的话,也许可以开始寻找这两个节点

MATCH (a1)-[..]-(a2) 
WHERE (a1.SomeProperty ='Yes' AND a2.SomeProperty ='Yes')
RETURN a1,a2
然后从这些节点开始提取子图,如下所示:


当然,我还没有玩过那么多Neo4J,所以我相信会有人过来给我一个更好的提示,返回所有包含2个以上“Yes”节点的路径:

MATCH p=(:Person)-[:RELATED_TO*]->(:Person)
WHERE 2 < REDUCE(s = 0, x IN NODES(p) | CASE WHEN x. SomeProperty = 'Yes' THEN s + 1 ELSE s END)
RETURN p;
MATCH p=(:Person)-[:RELATED_TO*]->(:Person)
其中2

REDUCE
函数用于计算
SomeProperty
值为“Yes”的节点数。

它返回路径
p
中的节点集合。这真是太神奇了——我从来不会使用
REDUCE
,主要是因为我不知道它的存在!如果我问你:如果图中存在路径,我怎么可能返回整个图而不仅仅是路径?你说的“整个图”是什么意思?您的意思是希望结果不显示子路径吗?是的!似乎还有100多个节点以“B”开头作为上述示例的扩展:如果100个节点中有2个或更多节点满足
SomeProperty
,我想显示所有100个节点。也许我应该问另外一个问题?@cybersam:好的……我问了一个新问题:D