我有Cinema
s,Film
和用户,我希望将View
关系建模为图表的头等公民,例如:" Me 去看电影#58 观看电影#43483 ",将来我可能想在 上添加" 2013 "或者"与 friend1 和 friend2 "到View
"关系",例如:
CREATE
(u1:User {id:1}),
(u2:User {id:2}),
(f1:Film {id:1}),
(f2:Film {id:2}),
(c1:Cinema {id:1}),
(c2:Cinema {id:2}),
// (v:View), (u1)-[:ATTENDED]->(v),(c1)<-[:AT]-(v),(v)-[:WATCHED]->(f1)
我一直试图弄清楚如何制作一个独特的View
(即一个人无法在同一个电影院看过同一部电影两次[这里有额外约会关系的地方] in])查询如果运行两次,则不会创建重复的View
节点。
MATCH (c:Cinema {id:1}), (f:Film {id:1}), (u:User {id:1})
CREATE UNIQUE (v:View),
(u)-[:ATTENDED]->(v),
(c)<-[:AT]-(v),
(v)-[:WATCHED]->(f)
return v, u, c, f
http://console.neo4j.org/r/xcu90c 似乎不支持创建唯一的节点和关系。
如果我删除单独的节点创建,它会有效,直到我不创建第二个视图: http://console.neo4j.org/r/x15bk1
MATCH (c:Cinema {id:1}), (f:Film {id:1}), (u:User {id:1})
MERGE (u)-[:ATTENDED]->(v:View), (c)<-[:AT]-(v), (v)-[:WATCHED]->(f)
return v, u, c, f
文档说您可以使用MERGE
创建路径,但看似只有直线路径...上面给出了逗号的语法错误。
所以基本上我不希望节点是唯一的(View没有任何属性),我想让节点的关系变得独一无二。请提出解决方案。
我对可能的解决方法的看法是(如果一切都失败了):
到目前为止,我对neo4j并没有留下深刻的印象,所以很多事情都没有用。
答案 0 :(得分:0)
我认为这是对你的模式中孤独的(v:View)
片段的抨击1.试试这个:
MATCH (c:Cinema { id:58 }),(f:Film { id:43483 }),(u:User { name:"twister" })
CREATE UNIQUE (u)-[:ATTENDED]->(v:View),(c)<-[:AT]-(v:View),(v:View)-[:WATCHED]->(f)
RETURN v, u, c, f
答案 1 :(得分:0)
你可以尝试使用多个MERGE语句,对我有用:
MATCH (c:Cinema {id:1}), (f:Film {id:1}), (u:User {id:1})
MERGE (u)-[:ATTENDED]->(v:View)
MERGE (c)<-[:AT]-(v)
MERGE (v)-[:WATCHED]->(f)
RETURN v, u, c, f