Neo4J根据标签值合并两个节点

时间:2016-02-22 15:09:29

标签: graph neo4j graph-databases bigdata

我对neo4j比较新,我在合并节点时遇到了一些麻烦。也许我的概念不对,但这是问题陈述和我试图做的事情。

问题陈述:根据属性值为每个用户查找匹配项来创建图表。

Person->  id: user1, movie: lord of the rings
Person->  id: user1, movie: alice in wonderland
Person->  id: user2, movie: star wars
Movie->   name: lord of the rings, genre: Fantasy
Movie->   name: alice in wonderland, genre: Fantasy
Movie->   name: star wars, genre: Fantasy

我想要的是我的输出:

user1 -> lord of the rings   
      -> alice in wonderland
user2 -> star wars

相反,我得到的是:

user1 -> lord of the rings
user1 -> alice in wonderland
user2 -> star wars

这是我到目前为止所尝试的:

MATCH (a:user),(b:movie)
where a.movieName = b.name
MERGE (a)-[r:matches]->(b)
RETURN r

理想情况下,我希望能够创建一个图表,我可以将用户与不同电影的所有连接视为一对多连接。我希望这很清楚!关于我做错了什么的任何想法。

1 个答案:

答案 0 :(得分:0)

你在这里做的是一种SQL逻辑,它不是应该使用Neo4j的方式:)。我认为你必须改变你的数据模型:

实际上,你有:

(u:User(name:"", movie:""})
(m:Movie{name:""})

问题在于,你有一个n:1(或1:n?永远不知道哪一个)关系,这意味着一个用户只能有一部电影。

Neo4j是一个图形数据库,这意味着您可以简单地执行此操作:

(u:User{properties...})-[:MATCHES]->(m:Movie{properties...})

然后,您可以使用此请求找到用户的每部电影:

MATCH (:User{properties...})-[:MATCHES]->(m:Movie) return m;