Neo4j学习笔记(1)节点与标签、merge子句

节点名与标签:

官方文档:

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;

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿洋太爱大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值