在Neo4j中创建与关系的关系
是否可以在Neo4j中创建与关系的关系 用例如下所示:在Neo4j中创建与关系的关系,neo4j,cypher,Neo4j,Cypher,是否可以在Neo4j中创建与关系的关系 用例如下所示: (:Question {name:"What movie?"})-[:Option]->(:Movie {name:"Movie1"}) ^ | [:Vote]
(:Question {name:"What movie?"})-[:Option]->(:Movie {name:"Movie1"})
^
|
[:Vote]
|
(:User)
- 我有一大堆问题,比如“我们应该看什么电影?”
- 每个问题都有许多选项,如“电影1”、“电影2”等
- 对于每个问题,我希望用户能够投票选择他们最喜欢的选项
(:Question {name:"What movie?"})-[:Option]->(:Movie {name:"Movie1"})
^
|
[:Vote]
|
(:User)
我意识到解决这个问题的一个方法是:
(:Question)-[:Option]->(:Movie)<-[:Vote]-(:User)
(:问题)-[:选项]->(:电影)
是否可以创建与关系的关系
不,这是不可能的。根据:
关系连接两个节点,并保证具有有效的
源节点和目标节点
也就是说:关系的起点和终点应该是一个节点
我认为您应该在数据模型中做一些更改。例如:
可能选项
可以是一个节点,而不是一个关系。更有意义,不是吗?这样:
(:Category)-[:HAS]->(:Option)
此外,投票
也可以是一个节点,而不是一个关系。。。这样,当用户进行(关系,ahn?)投票时,该投票节点将引用该选项及其相关的类别
(:Category)-[:HAS]->(:Option)
\ /
[:FOR_CATEGORY][:FOR_OPTION]
\ /
(:Vote)
|
[:MAKES]
|
(:User)
例如,如果您需要删除一个选项
,从而删除与其相关的:Vote
,您可以执行以下操作:
MATCH (o:Option {id:10})<-[:FOR_OPTION]-(v:Vote)
DETACH DELETE o
DETACH DELETE v
MATCH(o:Option{id:10})有没有机会编辑这个问题以提供一些真实的例子?我不确定如何解释category/option/thing/vote模式。当然可以。有道理——而且ASCII艺术比我的要好!:DI希望我自己不必管理引用完整性,因为在您的示例中,如果类别或选项被删除,我仍然需要删除投票节点。对的但至少它克服了引用ID问题,这是一个很好的特性。是的,你是对的<代码>分离删除
仅删除与要删除的节点相关的关系。。。请注意,:Vote
节点同时引用了:Category
和:Option
。预期的行为是什么?如果我删除了一个:选项
,那么我还需要删除:投票
以及与类别
的关系?或者最后一个可以保留?@JimHeising我更新了我的答案,在答案上添加了一个查询示例,使用分离删除
删除:选项和相关的投票
,包括涉及的关系。