节点名与标签:
官方文档:
A label is a named graph construct that is used to group nodes into sets; all nodes labeled with the same label belongs to the same set。
标签是用于将节点分组到集合中的命名图构造;使用相同标签标记的所有节点都属于同一集合
Neo4j中的节点标签,等同于关系数据库中的table表名,或者说是一个类别。但是跟table不同的是,这里节点很方便的有多个标签: (n:Person :User):
而节点名是可以不写的(只有你不需要对这个节点进行后续的操作,就没必要写,但是写了也无所谓)如:
create(:程序员 {name:"小骆",age:20,birthday:"2001/06/23"})
>>Added 1 label, created 1 node, set 3 properties, completed after 21 ms.
就是对匹配到或者创建的实例进行操作的时候就需要写节点,因为只有拿到对象,才能对对象操作,这是必须的.比如下面你要返回检索的结果
match(person:程序员) where person.name="小骆" return person
╒══════════════════════════════════════════════╕
│"person" │
╞══════════════════════════════════════════════╡
│{"birthday":"2001/06/23","name":"小骆","age":20}│
└──────────────────────────────────────────────┘
match(p1:程序员) where p1.name="小骆" return p1
╒══════════════════════════════════════════════╕
│"p1" │
╞══════════════════════════════════════════════╡
│{"birthday":"2001/06/23","name":"小骆","age":20}│
└──────────────────────────────────────────────┘
由上面的例子可以看出,无论你节点起什么名字都无所谓,它相当于是python语言里面的一个变量名,指向一个对象,可以对其进行操作。
所以节点是可写可不写的.需要操作实例的时候就需要写节点,也可以理解为节点是对应实例的变量名。但是注意标签是一定要写的,标签是Neo4j图数据库的分类.需要根据这个进行搜索。
CREATE (p:学生{name:"小红"})中的p只是在这个命令中的一个变量而已,命令执行完了之后,就没用了,所以后续就无法用它访问节点了。而可以用label做match访问。
MERGE子句:
有两个作用:当模式(Pattern)存在时,匹配该模式;当该模式不存在时,创建新的模式。在merge子句之后,可以显示的指定ON CREATE和ON MATCH子句,用于修改匹配的节点或关系的属性。使用MERGE子句,可以指定图形中必须存在一个节点,该节点必须具有特定的标签、属性等;如果不存在,那么merge子句将创建相应的节点,具体方法示例如下:
1.通过MERGE子句匹配搜索模式
匹配模式是:一个节点有Person标签,并且具有那么属性。如果数据库不存在该模式,那么创建新的节点,则将创建该节点。
$ MERGE(michael:Person{name:'Michael Douglas'})
RETURN michael
2.在MERGE子句中指定ON CREATE子句。
如果找到匹配的节点,那么不会执行ON CREATE子句,也不会修改节点的属性。如果找不到匹配的节点,则将创建该节点。
$ MERGE (keanu:Person{name:'keanu Reeves'})
ON CREATES SET keanu.created = timestamp()
RETURN keanu.name,keanu.created;
3.通过执行ON MATCH子句更改已经存在于数据库中节点的属性值。
一下命令执行完后,对于已经存在的标签为person的所有节点,将增加found与lastaccessed两个属性,并且赋值为TRUE及当前系统日期
$ MERGE (person:Person)
ON MATCH SET person.found = TRUE ,person.lastAccessed = data()
RETURN person.name,person.found,person.lastAccessed;
4.在MERGE子句中同时指定ON CREATE和ON MATCH子句。
以下命令初次执行时,将执行ONCREATE子句,创建节点及其created间函数调用并赋予了值,并没有执行MATCH子句(因为第一次执行的时候模式还没存在)第二次再执行时,因节点已存在,将执行ON MATCH子句,执行时间雨数调用并给lastSeen属性赋值。
$ MERGE (c:Person{name:'Chenbaoguo'})
ON CREATE SET C. created = timestamp( )
ON MATCH SET C. lastSeen = timestamp( )
RETURN C. name,C. created,C. lastSeen;