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
Neo4j匹配与一个或另一个节点相关的节点_Neo4j_Cypher - Fatal编程技术网

Neo4j匹配与一个或另一个节点相关的节点

Neo4j匹配与一个或另一个节点相关的节点,neo4j,cypher,Neo4j,Cypher,我正试着把我的头绕在一个问题上。例如,我有这个模式(photo:photo)-[:AUTHOR]->(user:user)。用户可以有朋友(用户:用户)-[:朋友]->(朋友:用户)。那么,我如何进行查询,找到我或我的朋友制作的所有:照片,并按日期排序(如果有的话) MATCH (user:User {id: 'me'}), (user)-[:FRIEND]-(friend:User) //other pattern matches that I need to do OPTIONAL MATC

我正试着把我的头绕在一个问题上。例如,我有这个模式
(photo:photo)-[:AUTHOR]->(user:user)
。用户可以有朋友
(用户:用户)-[:朋友]->(朋友:用户)
。那么,我如何进行查询,找到我或我的朋友制作的所有
:照片,并按日期排序(如果有的话)

MATCH (user:User {id: 'me'}), (user)-[:FRIEND]-(friend:User)
//other pattern matches that I need to do
OPTIONAL MATCH (photo:Photo)-[:AUTHOR]-(user | friend)
RETURN photo
ORDER BY photo.date
LIMIT 42

但据我所知,这个构造
(用户|朋友)
是无效的。那么,正确的方法是什么呢?

如果只查找与定义的
用户节点的单个关系,一个简单的方法是使用长度为0到1的可变长度关系。这将收集距离为0(即开始节点)的所有节点和距离为1的所有节点

MATCH (user:User {id: 'me'})-[:FRIEND*0..1]-(me_and_friend:User)
OPTIONAL MATCH (photo:Photo)-[:AUTHOR]-(me_and_friend)
RETURN photo
ORDER BY photo.date
LIMIT 42
更通用的解决方案是
将不同的节点收集到数组中,组合这些数组,然后再次使用
展开
进行
匹配

MATCH (user:User {id: 'me'}), (user)-[:FRIEND]-(friend:User)
WITH collect(user)+collect(friend) AS me_and_friends
UNWIND me_and_friends AS allusers
OPTIONAL MATCH (photo:Photo)-[:AUTHOR]-(allusers)
RETURN photo
ORDER BY photo.date
LIMIT 42

如果您匹配更长的路径或更复杂的模式,这可能会很有用。

哇,我自己应该考虑用这种方式使用“展开”。从未使用过可变长度,有趣的是,您可以使用0长度“引用”节点本身,非常棒的代码片段,谢谢!如果其他人想发布一些方便的解决方案,我会等一段时间再接受答案。哦,对不起,忘记了这个问题,接受了!谢谢