1.插入节点。插入一个Person类别的节点,且这个节点有一个属性name,属性值为Andres
CREATE (n:Person {name : '梁川川'});
CREATE (n:Person {name : '谢静静'});
CREATE (n:Person {name : '谢霆锋',relation : "大舅"});
CREATE (n:Person {name : '谢2',relation : "2舅"});
CREATE (n:Person {name : '谢3',relation : "3舅"});
CREATE (n:Person {name : '谢4',relation : "4舅"});
2.插入边。插入一条a到b的有向边,且边的类别为Follow r后面是关系
MATCH (a:Person),(b:Person)
WHERE a.name = '梁川川' AND b.name = '谢静静'
CREATE (a)-[r:喜欢]->(b);
MATCH (a:Person),(b:Person)
WHERE a.name = '谢静静' AND b.name = '谢霆锋'
CREATE (a)-[r:大舅]->(b);
MATCH (a:Person),(b:Person)
WHERE a.name = '谢静静' AND b.name = '谢2'
CREATE (a)-[r:二舅]->(b);
MATCH (a:Person),(b:Person)
WHERE a.name = '谢静静' AND b.name = '谢3'
CREATE (a)-[r:三舅]->(b);
MATCH (a:Person),(b:Person)
WHERE a.name = '谢静静' AND b.name = '谢4'
CREATE (a)-[r:权重4]->(b);
CREATE (a)-[r:4]->(b); r后面不能直接是数字
CREATE (a)-[r:"4"]->(b); 加双引号 单引号都不行
CREATE (a)-[r:权重4]->(b); 这样可以
3.更新节点。更新一个Person类别的节点,设置新的name。
MATCH (n:Person { name: '谢4' })
SET n.name = '谢贵波';
- 删除节点。删除这个节点和这个节点有关的联系
MATCH (n:Person { name:'谢3' })
DETACH DELETE n;
CREATE (n:Person {name : '谢三舅',hobby : "看书"});
CREATE (n:Person {name : '谢美美',hobby : "玩游戏"});
MATCH (a:Person),(b:Person)
WHERE a.name = '谢静静' AND b.name = '谢三舅'
CREATE (a)-[r:三舅]->(b);
MATCH (a:Person),(b:Person)
WHERE a.name = '谢三舅' AND b.name = '谢美美'
CREATE (a)-[r:女儿]->(b);
MATCH (n:Person { name:'谢三舅' })
DETACH DELETE n;
MATCH (a:Person),(b:Person)
WHERE a.name = '谢静静' AND b.name = '谢美美'
CREATE (a)-[r:表妹]->(b);
5.删除边
MATCH (a:Person)-[r:Follow]->(b:Person)
WHERE a.name = '梁川川' AND b.name = '谢静静'
DELETE r;
6.查询最短路径。
MATCH (ms:Person { name:'梁川川' }),(cs:Person { name:'谢静静' }), p = shortestPath((ms)-[r:喜欢]-(cs)) RETURN p;
CREATE (n:Person {name : '谢美颜',hobby : "看书"});
MATCH (a:Person),(b:Person)
WHERE a.name = '谢美美' AND b.name = '谢美颜'
CREATE (a)-[r:姐妹]->(b);
MATCH (ms:Person { name:'梁川川' }),(cs:Person { name:'谢美颜' }), p = shortestPath((ms)-[r:姐妹]-(cs)) RETURN p;
(no changes, no records)
中间隔了一个不同的关系
7.查询两个节点之间的关系。
MATCH (a:Person { name:'梁川川' })-[r]->(b:Person { name:'谢美颜' })
RETURN type(r);
(no changes, no records)
MATCH (a:Person { name:'梁川川' })-[r]->(b:Person { name:'谢静静' })
RETURN type(r);
"喜欢"
8.查询一个节点的所有Follower。
**MATCH (:Person { name:'谢静静' })-[r:喜欢]->(Person)
RETURN Person.name;
(no changes, no records)
MATCH (:Person { name:'梁川川' })-[r:喜欢]->(Person)
RETURN Person.name;
"谢静静"**
关系是单向的
java版第一个程序
新建maven项目
从官网下载drive不好用,我是直接从 maven repository 查询的
<!-- https://mvnrepository.com/artifact/org.neo4j.driver/neo4j-java-driver -->
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>1.4.5</version>
</dependency>
通过代码创建节点
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
Create();
}
private static void Create() {
// Driver driver = GraphDatabase.driver( "bolt://127.0.0.1", AuthTokens.basic( 用户名, 密码 ) );
Driver driver = GraphDatabase.driver( "bolt://127.0.0.1", AuthTokens.basic( "neo4j", "541711153" ) );
Session session = driver.session();
session.run( "CREATE (n:Person {name : '陈浩杰',hobby : '看书'})" );
session.close();
driver.close();
}
}
执行可以看到页面http://127.0.0.1:7474/browser/ 多了一个节点
通过代码查询节点
private static void Query() {
Driver driver = GraphDatabase.driver( "bolt://localhost", AuthTokens.basic( "neo4j", "541711153" ) );//调用地址,用户名和密码
Session session = driver.session();
StatementResult result = session.run( "MATCH (a: Person) WHERE a.name = '谢静静' RETURN a.name AS name" );
while ( result.hasNext() )
{
Record record = result.next();
System.out.println( record.get("name").asString() );
}
session.close();
driver.close();
}
============没试过
创建唯一性约束,同时具有索引效果,类似关系型数据库中的主键。注意,这只能在数据库中还未插入数据时设置。
CREATE CONSTRAINT ON (a:Person) ASSERT a.name IS UNIQUE;
创建索引。
CREATE INDEX ON :Person(name);
查看所有的节点数和边数
MATCH (n) RETURN count(n);
MATCH ()–>() RETURN count(*);