Neo4j 使用cypher语言进行操作

Cypher语言是在学习Neo4j时用到数据库操作语言(DML),涵盖对图数据的增删改查

 neo4j数据库简单除暴理解的概念:

Neo4j中不存在表的概念,只有两类:节点(Node)和关联(Relation),可以简单理解为图里面的点和边。
在数据查询中,节点一般用小括号(),关联用中括号[]
当然也隐含路径的概念,是用节点和关联表示的,如:(a)-[r]->(b),表示一条从节点a经关联r到节点b的路径。

 备份Neo4j的数据:

1)停掉数据库.
2)备份D:\Neo4J\neo4j-enterprise-1.9.1\data目录下graph.db目录中的所有内容.
3)在服务器上拷贝graph.db目录中的内容到新的服务器的相同目录中,启动即可.

Cypher的基本操作

1)创建节点

            create (a) 创建空节点
create (a:Person) 创建标签(可以理解为类)为Person的节点
create (a:Person {name:‘Kaine‘,age:28}) 创建标签为Person,属性name值为Kaine,属性age值为28的节点

 2)创建关联

            match (a),(b)
where a.name=‘Kaine‘ and b.name=‘Sharon‘
create (a)-[r]->(b) 创建a节点和b节点的路径,此时变量r即代表关联,它也可以有标签

 

3)查询关键字

        match:用来匹配一定模式,可以是简单的节点、关联,也可以是复杂的路径
where:用来限定条件,一般是限定match中的出现变量的属性
return:返回结果
start:开始节点,一般用于有索引的节点或者关联
        match ... where ... return ...
如果match有多个对象,用逗号隔开;
如果where有多个条件,用and连接;
如果return有多个变量,用逗号隔开

 4)查询举例讲解

        match (n) return n 
查询所有节点及关联
match (a)-[r]->(b) where a.name=‘Kaine‘ return a,b
查询属性name的值是Kaine的节点,及其所有关联节点
match (a)-[*1..3]->(b) where a.name=‘Kaine‘ return a,b
查询属性name值是Kaine的节点,及其所有距离为1到3的关联节点,
match (a)-[*2]->(b) where a.name=‘Kaine‘ and not (a)-[*1]->(b) return a,b
查询属性name的值是Kaine的节点,及其所有距离为2并且去除距离为1的节点。
(在计算好友的好友时会用到,即如果a、b、c三个人都认识,如果仅计算跟a距离为2的人的时候会把b、c也算上,因为a->b->c,或者a->c->b都是通路) 注:关联的中括号内数字的含义
n 距离为n
..n 最大距离为n
n.. 最小距离为n
m..n 距离在m到n之间

a.创建

CREATE (id:label {key:value})
id: 为节点添加一个唯一ID,不设置则系统自动设置一个,不设置时是 CREATE (:label...
label: 标签,生命节点类型
{}: 属性定义,key/value格式

b.关系

-[role:label {roles: ["Neo"]}]->
-- 表示一个无指向的关系
--> 表示一个有指向的关系
[] 能够添加ID,属性,类型等信息 

另看:http://blog.csdn.net/wangweislk/article/details/47661863

按id查询(这里的id是系统自动创建的):
start n=node(20) return m; 查询所有节点:
start n=node(*) return n;
查询属性,关系:
start n=node(9) return n,n.name,n.ID,n.level; //查看指定节点,返回需要的属性 start n=node(*) match (n)-[r:SubClassOf]->m return m,n,n.name,n.ID,r; //查找指定关系 按关系查询多个节点:
start a = node(14) match b-[r]<->a return r,b; start a = node(0) match c-[:KNOWS]->b-[:KNOWS]->a return a,b,c; //查找两层KNOWS关系的节点 start a = node(21) match b-[*]->a return a,b; //查找所有与a节点有关系的节点 使用Where条件进行查询:(不用建立Index也可以使用)
start n=node(*) where n.name="Activity" return n;
并且可以使用特定符号:
start n=node(*) where n.ID?="A*" return n;
start n=node(*) where HAS(n.type) return n,n.name,n.ID,n.type; //如果存在属性type,并且以A开头,就输出节点。 配置文件自动建立索引:
修改conf目录下的neo4j.properties文件内容如下,重启Neo4J,对重启后新建的Node生效。
# Enable auto-indexing for nodes, default is false
node_auto_indexing=true # The node property keys to be auto-indexed, if enabled
node_keys_indexable=name,ID
# Enable auto-indexing for relationships, default is false
relationship_auto_indexing=true # The relationship property keys to be auto-indexed, if enabled
relationship_keys_indexable=KNOWS,SubClassOf 建立索引后可以用node_auto_index按属性值查询:
start n=node:node_auto_index(name="C") return n,n.name; 修改属性值:
start a = node(*) where a.name="a" set a.name="A" return a,a.name ;
start n=node(0) set n.name="Root",n.ID="001" ; //给默认的根节点添加name,ID属性,便于查询。 删除:
删除所有节点和关系:
START n=node(*)
match n-[r]-()
delete n,r; 删除所有节点以上方法过时,后面版本将被遗弃-推荐使用如下方法
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

图形数据库关系

  一 概念

节点:

(a) //actors
(m) //movies
( ) //some anonymous nod

关系:

-[r]-> //a relationship referred to as "r"
(a)-[r]->(m) //actors having a relationship referred to as "r" to movies
-[:ACTED_IN]-> //the relationship type is ACTED_IN
(a)-[:ACTED_IN]->(m) //actors that ACTED_IN some movie
(d)-[:DIRECTED]->(m) //directors that DIRECTED some movie

属性:

(m {title:"The Matrix"}) //Movie with a title property
(a {name:"Keanu Reeves",born:1964}) //Actor with name and born property
(a)-[:ACTED_IN {roles:["Neo"]}]->(m) //Relationship ACTED_IN with roles property (an array of character names)

标签:

(a:Person) //a Person
(a:Person {name:"Keanu Reeves"}) //a Person with properties
(a:Person)-[:ACTED_IN]->(m:Movie) //a Person that ACTED_IN some movie

二 neo4j使用的查询语言 cypher

http://www.uml.org.cn/sjjm/201203063.asp

查询语言包含

START:在图中的开始点,通过元素的ID或所以查找获得。
MATCH:图形的匹配模式,束缚于开始点。
WHERE:过滤条件。
RETURN:返回所需要的。

分享网站:http://www.cnblogs.com/rongyux/p/5537028.html

neo4j初次使用学习简单操作-cypher语言使用的更多相关文章

  1. Elasticsearch5.5通过案例学习简单操作

    1. 建立员工目录 ES数据库对象与关系型数据库对象对比 Relational DB -> Databases -> Tables -> Rows -> ColumnsElas ...

  2. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

  3. GitHub学习心得之 简单操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...

  4. selenium webdriver学习(二)————对浏览器的简单操作(转载JARVI)

    selenium webdriver学习(二)————对浏览器的简单操作 博客分类: Selenium-webdriver   selenium webdriver对浏览器的简单操作 打开一个测试浏览 ...

  5. MongoDB快速入门学习笔记2 MongoDB的概念及简单操作

    1.以下列举普通的关系型数据库和MongoDB数据库简单概念上的区别: 关系型数据库 MongoDB数据库 说明 database database 数据库 table collection 数据库表 ...

  6. 20165318 预备作业二 学习基础和C语言基础调查

    20165318 学习基础和C语言基础调查 技能学习经验 我们这一代人,或多或少的都上过各种兴趣班,舞蹈钢琴画画书法,我也是如此.可这些技能中,唯一能拿的出手的就是舞蹈了.按照<优秀的教学方法- ...

  7. 20165230 学习基础和C语言基础调查

    20165230 学习基础和C语言基础调查 技能学习经验 我擅长弹钢琴.小时候我曾上过很多兴趣班,比如钢琴.跳舞.书法.绘画等等,唯一坚持至今的只有钢琴.仔细一算学习钢琴至今已有12年,不能说已经精通 ...

  8. 简单的C语言编译器--概述

      在学习了编译原理的相关知识后,逐渐的掌握一个编译器的结构.作用和实现方法.同时,希望自己在不断的努力下写出一个简单的C语言编译器. 实现步骤 词法分析器:将C语言测试代码分解成一个一个的词法单元: ...

  9. MongoDB数据库简单操作

    之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...

随机推荐

  1. Be a new gentlemen

    学好技术的同时,更要注重自身素养的提升! 一  .有则改之,无责加冕 1.女士优先 2. 不随地吐痰, 不乱扔垃圾, 不在人群中抽烟 3. 不大声喧哗 4. 不插队,碰到别人要说抱歉 5. 不在公共交 ...

  2. 来玩Play框架05 数据库

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 数据库是整个站点的数据储藏室.用户提交的数据可以存储在数据库中,以便未来使用.Pl ...

  3. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  4. js判断窗体或容器滚动条到底部

    NO1---jquery判断窗体滚动条到底部 $(window).scroll(function () {if ($(window).scrollTop() >= $(document).hei ...

  5. 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序

    物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...

  6. iOS之17个提升iOS开发效率的必用工具

    时间就是金钱.编码效率的提升意味着更多的收入.可是当我们的开发技巧已经到达一定高度时,如何让开发效率更上一层楼呢?答案就是使用开发工具!在这篇文章中,我会向你介绍一些帮助我提升编码速度和工作效率的工具 ...

  7. Hibernate 系列 04 - Hibernate 配置相关的类

    引导目录: Hibernate 系列教程 目录 前言: 通过上一篇的增删改查小练习之后,咱们大概已经掌握了Hibernate的基本用法. 我们发现,在调用Hibernate API的过程中,虽然Hib ...

  8. MySql提示:The server quit without updating PID file(…)失败

    一般有一下集中可能 1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限解决方法 :给予权限,执行 "chown -R mysql:mysql /var ...

  9. mongodb 性能篇

    一.  索引及其优化 索引的概述 数据库的索引好比是一本书前面的目录,能加快数据查询的速度. 适当的地方增加索引,不合理的地方删除次优索引,能优化性能较差的应用. 索引的操作 基础索引:db.ken. ...

  10. 【转】XenServer架构之XAPI

    一.XAPI对资源池的管理 作为XenServer的管理工具集,XAPI管理XenServer的主机,网络和存储.不管是OpenStack还是CloudStack,如果使用XenServer作为虚拟化 ...