继续neo4j的命令课程学习:
目录
一、MERGE命令
Neo4j使用CQL MERGE命令 -
- 创建节点,关系和属性
- 为从数据库检索数据
MERGE命令是CREATE命令和MATCH命令的组合。
MERGE = CREATE + MATCH
Neo4j CQL MERGE命令在图中搜索给定模式,如果存在,则返回结果
如果它不存在于图中,则它创建新的节点/关系并返回结果
1.1、MERGE带标签的节点
下面的例子合并给定标签的节点。
MERGE (robert:Critic) RETURN robert, labels(robert) |
因为没有包含Ctritic标签的节点,一个新节点在数据库中创建了
1.2、MERGE属性来自已存在节点的单个节点
当每个绑定节点的属性’p’来自一个节点集时,如果’p’存在重复,创建的时候只会创建一次。
.//先创建一个节点 MERGE (riky:Person { name: 'riky', bornIn:'newyork'}) RETURN riky.name, riky.bornIn //先查询出来节点,根据节点的属性MERGE 另外一个节点数据 MATCH (person:Person{ bornIn:'newyork'}) MERGE (city:City { name: person.bornIn }) RETURN person.name, person.bornIn, city |
1.3、MERGE在CREATE和MATCH中的使用
MERGE与CREATE搭配
检查节点是否存在,如果不存在则创建它并设置属性。
MERGE (keanu:Person { name: 'Keanu Reeves' }) ON CREATE SET keanu.created = timestamp() RETURN keanu.name, keanu.created |
本查询创建了keanu节点,并设置created属性为创建的时间戳。
MERGE与MATCH搭配
匹配节点,并在找到的节点上设置属性。
MERGE (person:Person { name: 'Keanu Reeves2' }) ON MATCH SET person.found = TRUE RETURN person.name, person.found |
本查询找到所有的Person节点,并设置found属性为true,然后返回它们。
MERGE与CREATE和MATCH同时使用
检查节点是否存在,如果不存在则创建它并设置属性。
MERGE (keanu:Person { name: 'Keanu Reeves' }) ON CREATE SET keanu.created = timestamp() ON MATCH SET keanu.lastSeen = timestamp() RETURN keanu.name, keanu.created, keanu.lastSeen |
利用Merge和MATCH设置多属性
如果需要设置多个属性,将它们简单地以逗号分开即可。
MERGE (person:Person) ON MATCH SET person.found = TRUE , person.lastAccessed = timestamp() RETURN person.name, person.found, person.lastAccessed |
MERGE关系
MERGE可用于匹配或者创建关系。
MATCH (charlie:Person { name: 'Charlie Sheen' }),(wallStreet:Movie { title: 'The Matrix' }) MERGE (charlie)-[r:ACTED_IN]->(wallStreet) RETURN charlie.name, type(r), wallStreet.title |
因为"Charlie Sheen"已经在"The Matrix"参演了,所以找到已存的关系并返回。注意:使用MERGE去匹配或者创建关系时,必须至少指定一个绑定的节点。
合并多个关系
当MERGE应用于整个模式时,要么全部匹配上,要么全部新创建。
MATCH (oliver:Person { name: 'Lilly Wachowski' |