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
Graph 在Neo4j中匹配具有和不具有关系的节点_Graph_Neo4j_Cypher - Fatal编程技术网

Graph 在Neo4j中匹配具有和不具有关系的节点

Graph 在Neo4j中匹配具有和不具有关系的节点,graph,neo4j,cypher,Graph,Neo4j,Cypher,我使用的是Neo4j安装附带的示例电影图 我想得到一个演员(名字),他在电影中扮演的角色和所有其他电影(他还没有连接到) 我能得到的最接近的是下面这样的东西,但是演员、角色和被扮演的电影重复的次数和其他电影一样多 MATCH (actor{name:'Bill Paxton'})-[roles:ACTED_IN]->(actedInMovies), (otherMovies:Movie) WHERE NOT (actor)-[:ACTED_IN]->(otherMovies) RET

我使用的是Neo4j安装附带的示例电影图

我想得到一个演员(名字),他在电影中扮演的角色和所有其他电影(他还没有连接到)

我能得到的最接近的是下面这样的东西,但是演员、角色和被扮演的电影重复的次数和其他电影一样多

MATCH (actor{name:'Bill Paxton'})-[roles:ACTED_IN]->(actedInMovies), (otherMovies:Movie)
WHERE NOT (actor)-[:ACTED_IN]->(otherMovies)
RETURN actor, roles, actedInMovies, otherMovies
我如何才能只得到演员的一个结果、相应电影的角色以及所有其他电影的结果


提前谢谢

一种稍微不同的方法怎么样?首先获取比尔·帕克斯顿出演的所有电影,然后通过这些电影集找到所有不在其中的电影。然后返回Bill Paxton,他出演的电影集和他未出演的电影集(即剩余的)

更新查询以反映我测试它时使用的数据集。添加了角色名称集合,并将结果集的电影节点更改为标题

MATCH (actor {name:'Bill Paxton'})-[r:ACTS_IN]->(acted) 
with actor, collect(acted) as acted_in_movies, collect(acted.title) as acted_titles, collect(r.name) as roles
MATCH (other:Movie)
WHERE none (acted in acted_in_movies where acted = other) 
RETURN actor.name, acted_titles, roles, collect(other.title) as other_movies

我用那个查询得到了0行?不,这是肯定的,这个?匹配(演员{姓名:'Bill Paxton'})-[roles:ACTED_IN]->(ACTED)return actor,collect(ACTED)as ACTED_IN_IN_movies它必须是数据。我在这里使用了电影数据集并尝试了原始查询,但我必须将ACTED_IN更改为ACTS_IN,以便返回行。这很好。抱歉,错误在于,参与者节点被标记为:Person,而不是:actor…我用:Person标签编辑了您的原始答案,这几乎是我所需要的,角色丢失了。。。
MATCH (actor {name:'Bill Paxton'})-[r:ACTS_IN]->(acted) 
with actor, collect(acted) as acted_in_movies, collect(acted.title) as acted_titles, collect(r.name) as roles
MATCH (other:Movie)
WHERE none (acted in acted_in_movies where acted = other) 
RETURN actor.name, acted_titles, roles, collect(other.title) as other_movies