我是第一次尝试Neo4j.我正在使用2.0-RC1社区版.
我创建了一些节点:
MERGE (u:User{username:'admin',password:'admin'})
MERGE (r1:Role{name:'ROLE_ADMIN'})
MERGE (r2:Role{name:'ROLE_WEB_USER'})
MERGE (r3:Role{name:'ROLE_REST_USER'})
Run Code Online (Sandbox Code Playgroud)
现在我想在节点之间添加关系.不过,我不希望清除上面的脚本创建的现有数据库,添加语句,并再次运行它.我想添加与现有节点的关系.谷歌帮我找到了这个:
START n=node(*), m=node(*)
where has(n.username) and has(m.name) and n.username = 'admin'
and m.name = 'ROLE_WEB_USER'
create (n)-[:HAS_ROLE]->(m)
Run Code Online (Sandbox Code Playgroud)
哪个工作正常(即使我不懂所有的语法).但是,我知道这会找到任何具有username属性的节点和任何具有name属性的节点,而不是使用标签来检查它是否具有正确的节点类型.
如何使用标签做同样的事情?
Ste*_*ter 74
在Neo4j 2.0中,您可以为标签和用于查找的属性创建模式索引:
CREATE INDEX ON :User(username)
CREATE INDEX ON :Role(name)
Run Code Online (Sandbox Code Playgroud)
要创建您可能使用的关系:
MATCH (u:User {username:'admin'}), (r:Role {name:'ROLE_WEB_USER'})
CREATE (u)-[:HAS_ROLE]->(r)
Run Code Online (Sandbox Code Playgroud)
MATCH如果可能,将使用索引.如果没有索引,它将查找带有标签的所有节点,并查看属性是否匹配.
注意,上面的语法仅适用于Neo4j 2.0.0-RC1及更高版本.
2020 年 4 月更新:
新的 Cypher 语法如下。如'CREATE INDEX ON'已被弃用是..
CREATE INDEX FOR (n:Label) ON (n.property)
Run Code Online (Sandbox Code Playgroud)