当前位置:   article > 正文

1、neo4j图数据库基本使用_neo4j 查询

neo4j 查询

目录

一、创建节点

二、查询结点

(1)查询整个数据库

(2)查询born属性小于1955的结点

(3)查询指定label的结点

(4)查询指定属性的结点

三、创建关系

(1)创建没有任何属性的关系

(2)创建关系并设置关系的属性

四、查询关系

(1)查询跟指定结点有关系的结点

(2)查询有向关系的结点

(3)获取关系类型

(4)查询特定的关系类型

五、更新图形

(1)创建一个完整的Path

(2)通过ID为结点增加属性

(3)  通过ID为结点增加标签

(4)为关系增加属性

六、Merge

(1)通过merge匹配搜索结果

(2)merge与on create

(3)merge与on match

(4) merge与on create、on match一起

(5)merge与关系

 七、与实体有关的函数

(1)id()函数,返回结点或关系的ID

(2)type()函数,返回关系类型

(3)label()函数,返回结点的标签


环境:kali、neo4j2.1.5

一、创建节点

        格式:

create (Variable:Lable1:Lable2{Key1:Value1,Key2:Value2})

        例如:

  1. create (n:Person { name: 'Tom Hanks', born: 1956 }) return n;
  2. //该结点标签为Preson(也就是这个结点的名字),结点有两个属性:name和born,属性所对的值分别为:‘Tom Hanks’和‘1956’.
  3. create (n:Person { name: 'Robert Zemeckis', born: 1951 }) return n;
  4. create (n:Movie { title: 'Forrest Gump', released: 1951 }) return n;

        关于return语句,创建结点后,没有return,截面上将不会出现创建的结点,只会显示有没有创建成功。

 二、查询结点

        match:用于查询数据库;where:用于对查询语句进行约束。

(1)查询整个数据库

match(n) return n;

(2)查询born属性小于1955的结点

match(n) where n.born<1955 return n;

 (3)查询指定label的结点

match(n:movie) return n;

(4)查询指定属性的结点

三、创建关系

        语法结构:

StartNode-[Variable:RelationshipType{Key1:Value1,Key2:Value2}] -> EndNode

        注:在创建关系的时候,需要指定关系类型。

(1)创建没有任何属性的关系

  1. match (a:Person),(b:Movie)
  2. where a.name = 'Robert Zemeckis' AND b.title = 'Forrest Gump'
  3. //找到label分别为‘Person’和‘Movie’的两个结点,且a结点的属性name为'Robert Zemeckis'、b结点的属性
  4. name为'Forrest Gump'。找到后,用a表示Person这个结点,b表示Movie这个结点。
  5. create (a)-[r:DIRECTED]->(b)
  6. //创建a->b的一个关系,关系用变量r表示,DIRECTED表示关系的类型
  7. return r;
  8. //类似于可视化关系的意思

 (2)创建关系并设置关系的属性

  1. match (a:Person),(b:Movie)
  2. where a.name = 'Tom Hanks' AND b.title = 'Forrest Gump'
  3. create (a)-[r:ACTED_IN { roles:['Forrest'] }]->(b)
  4. return r;

 四、查询关系

        在Cypher中,关系分为三种:

  • 符号"--",表示有关系,忽略关系的类型和方向;
  • 符号"-->"和"<--"表示有方向的关系。

(1)查询跟指定结点有关系的结点

  1. //查询所有跟Movie有关系的结点,并返回
  2. match(n)--(m:Movie)
  3. return n;

        首先,查看所有的关系:

         再查询与movie有关的结点:

(2)查询有向关系的结点

  1. match (n:Person { name: 'Tom Hanks' })-->(movie)
  2. return n,movie;

 (3)获取关系类型

  1. match (n:Person { name: 'Tom Hanks' })-[r]->(movie)
  2. return r,type(r);

        返回关系的类型;

        返回关系。

(4)查询特定的关系类型

  1. match (:Person { name: 'Tom Hanks' })-[r:ACTED_IN{roles:['Forrest']}]->(movie)
  2. return r,type(r);

        返回关系类型;

         返回关系。

五、更新图形

        set:用于对更新结点的标签和实体的属性;

        remove:用于移除实体的属性和结点的标签。

(1)创建一个完整的Path

  1. create p =(vic:Worker:Person{ name:'vic',title:"Developer" })-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael:Worker:Person { name: 'Michael',title:"Manager" })
  2. return p

        neo结点没有任何属性,但是有一个ID值,可以通过ID值为neo结点设置属性和标签。

        注意:由于Path是由节点和关系构成的,当路径中的关系或节点不存在时,Neo4j会自动创建。

        neo结点的ID值为4。

(2)通过ID为结点增加属性

  1. match (n)
  2. where id(n)=4
  3. set n.name = 'neo'
  4. return n;

(3)  通过ID为结点增加标签

  1. match (n)
  2. where id(n)=4
  3. set n:Company
  4. return n;

(4)为关系增加属性

  1. match (n)<-[r]-(m)
  2. where id(n)=7 and id(m)=8
  3. set r.team='Azure'
  4. return r;


六、Merge

(1)通过merge匹配搜索结果

        匹配模式:一个节点有Person标签,并且具有name属性;如果数据库不存在该模式,那么创建新的节点;如果存在该模式,那么绑定该节点;

  1. merge (michael:Person { name: 'Michael Douglas' })
  2. return michael;

        merge 一个标签为:Person,属性name为:Michael Douglas的结点,因为数据库中没有该结点,所以创建一个满足上述条件的结点。即merge语句就相当于create和match语句。

  1. merge (n:Person)
  2. return n;

         merge一个标签为:Person的结点,因为数据库中有标签为Person的结点,所以merge语句回返回所有标签为Person的结点。

(2)merge与on create

        检查节点是否存在,如果不存在则创建它并设置属性。

  1. merge (keanu:Person { name: 'Keanu Reeves' })
  2. on create set keanu.created = timestamp()
  3. return keanu.name, keanu.created

(3)merge与on match

        匹配结点,并在找到的结点上设置属性。

  1. merge (n:Person)
  2. on match set n.found = TRUE , n.lastAccessed = timestamp()
  3. return n,n.name, n.found, n.lastAccessed

         该语句回匹配所有标签为Person的结点,并为这些结点设置found和lastAccessed两个属性。

(4) merge与on create、on match一起

  1. merge (n:Person { name: 'Keanu Reeves' })
  2. on create set n.created = timestamp()
  3. on match set n.lastSeen = timestamp()
  4. return n,n.name, n.created, n.lastSeen

        相当于匹配一个标签为Person、name属性为Keanu Reeves的结点,然后为匹配到的结点的设置created、lastSeen这两个属性。

 (5)merge与关系

  1. match (n:Person)
  2. merge (n)-[:WORKS_AT]->(m:Movie)
  3. return n,m;

        查找标签为Person的结点,merge (n)-[:WORKS_AT]->(m:Movie),如果能找到标签为Person的结点指向标签为Movie的结点,且关系属性为WORKS_AT,就返回符合条件的path;否则创建。

 七、与实体有关的函数

(1)id()函数,返回结点或关系的ID

  1. match (n:Company {name:'neo'})
  2. return id(n);

  1. match (n:Person {name:'vic'})-[r]->(m:Company)
  2. return id(r);

 (2)type()函数,返回关系类型

  1. match (n:Person {name:'vic'})-[r]->(m:Company)
  2. return type(r);

 (3)label()函数,返回结点的标签

  1. match (n:Person {name:'vic'})-[r]->(m:Company)
  2. return labels(n);

参考资料:

使用Cypher查询数据-Neo4j 基本使用-CSDNNeo4j技能树

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/1013501
推荐阅读
相关标签
  

闽ICP备14008679号