如何在neo4j中表达以下内容?
匹配或创建用户bob;鲍勃在工作室工作;在工作室,他被允许涂鸦;在工作室,他也被允许输入。
这就是我所拥有的:
MERGE (u:user {name:'bob'})
MERGE (c:company {name: 'studio'})
MERGE (u)-[:works_at]->(c)-[:allowed_to]->(p:permission {name:'doodle'})
MERGE (u)-[:works_at]->(c)-[:allowed_to]->(p:permission {name:'type'})
这不起作用,因为许可成为公司的关系。
此外,是否可以将关系链接起来:
MERGE work=(u)-[:works_at]->(c)
CREATE (work)-[:allowed_to]->(p:permission {name:'doodle'})
CREATE (work)-[:allowed_to]->(p:permission {name:'type'})
在哪里为变量指定关系以便稍后在另一个查询中继续?
答案 0 :(得分:3)
如何对其进行建模以便公司授予权限?像这样......
MERGE (u:user {name:'bob'})
MERGE (c:company {name: 'studio'})
MERGE (u)-[:works_at]->(c)
MERGE (u)-[:allowed_to]->(p1:permission {name:'doodle'})<-[:GRANTS]-(c)
MERGE (u)-[:allowed_to]->(p2:permission {name:'type'})<-[:GRANTS]-(c)
RETURN *
您无法通过先前在其他查询中创建的标识符/变量来引用对象。您必须在新查询中重新匹配或合并先前创建的对象。
第2部分可以建模如下..
MERGE (u:user {name:'bob'})
MERGE (c:company {name: 'studio'})
MERGE (u)-[:DOES]->(work:Work {start_date: timestamp()} )-[:AT]->(c)
CREATE (work)-[:allowed_to]->(p:permission {name:'doodle'})
CREATE (work)-[:allowed_to]->(p:permission {name:'type'})
答案 1 :(得分:2)
作为替代方案,如果您永远不需要在公司中查找具有特定权限的所有用户,则可以将权限集合维护为关系属性。
MERGE (u:user {name:'bob'})
MERGE (c:company {name: 'studio'})
MERGE (u)-[r:works_at]->(c)
SET r.permissions = ['doodle', 'type']