Neo4j使用教程


neo4j是老牌的图数据库,社区版图尺寸限制是34B节点,企业版无此限制
image_1d607bsadpjs8onugk1thual72j.png-63.9kB

1、从一个比较复杂栗子开始

MATCH (p:IP) WHERE p.ipId='61.158.149.106' WITH p 
MATCH (p)<-[r1]-(u:UserDate) WITH DISTINCT u, p, rand() AS rand1 ORDER BY rand1 LIMIT 20 
MATCH (u)-[]->(g) WITH DISTINCT g, u, p, rand()  AS rand2 ORDER BY rand2 LIMIT 40 
MATCH (g)<-[]-(u1) WITH DISTINCT u1, rand() AS rand3 ORDER BY rand3 LIMIT 400 RETURN u1;

上面栗子中使用了4个MATCH引导的查询子句。WITH的作用是保存前面查询的变量,与RETURN 作用相似,使后面的查询/筛选语句能够使用。

详细分析上例中用到的点

MATCH (p:IP) WHERE p.ipId='61.158.149.106' WITH p      

MATCH 匹配类型为IP的节点,WHERE子句筛选出属性ipId为‘61.158.149.106’的顶点,WITH保存声明变量。

MATCH (p)<-[r1]-(u:UserDate) WITH DISTINCT u, p, rand() AS rand1 ORDER BY rand1 LIMIT 20 

MATCH 匹配从类型为UserDate的节点通过边,到达IP类型节点p的模式,模式可以被赋值。注意边的别名r1使用中括号声明。WITH保存变量u,p,rand()函数生成的随机变量。并根据u做去重,对随机变量取别名,排序,取前20个。

RETURN u1

RETURN返回输出的变量

2、关键字

START 弃用
MATCH
WHERE
RETURN
LIMIT
ORDER BY
WITH
DISTINCT
CREATE
SET
DELETE
UNION

1.MATCH
MATCH用于匹配查找节点和v-e-v模式。匹配的结果可以赋值给一个变量

MATCH p=(u:UserDate) RETURN u LIMIT 20;
MATCH p=(a:UA)<-[r1:userUA]-(u:UserDate)-[r:userIp]->(i:IP) RETURN p, u, r, i LIMIT 20;

如上两列,第一列,匹配类型为UserDate的节点,赋值给p,第二列匹配元路径模式UA-UserDate-IP,赋值给p。

2.WHERE
WHERE 后接筛选条件子句,筛选条件的返回值需要是布尔值。多个筛选条件可以使用AND 或者 OR 连接,表示并且,抑或的关系。

MATCH p=(a:UA)<-[r1:userUA]-(u:UserDate)-[r:userIp]->(i:IP) WHERE u.date=“18-12-10” AND i.ipId=‘221.13.63.56’ RETURN u.date, r.count, i.ipId LIMIT 20;

:param date_list: [“18-12-10”, “18-12-09”]
MATCH p=(a:UA)<-[r1:userUA]-(u:UserDate)-[r:userIp]->(i:IP) WHERE u.date IN $date_list RETURN u.date, r.count, i.ipId LIMIT 20;

上例中:param定义变量,$date_list调用变量date_list.

3.RETURN
RETURN 返回查询到的节点/边/节点的属性/边的属性。RETURN与聚合函数连用,产生groupBy().agg()的效果。
MATCH p=(a:UA)<-[r1:userUA]-(u:UserDate) WHERE u.date IN $date_list RETURN u.userDateId, count(a) LIMIT 20;

4.LIMIT/SKIP/ORDER BY
RETURN/WITH 后接 ORDER BY 排序,默认升序,DESC降序,LIMIT限制输出,SKIP跳跃输出
MATCH (u:UserDate)-[r:userIp]->(i:IP) WHERE i.ipId=“183.207.216.37” RETURN r ORDER BY r.count LIMIT 20;

MATCH (u:UserDate)-[r:userIp]->(i:IP) WHERE i.ipId=“183.207.216.37” RETURN r ORDER BY r.count SKIP 4;

5.WITH
WITH子句的最大的作用就是储存变量,方便后面的查询子句使用。它相当于RETURN将查询结果返回到内存。所以也可以与LIMIT,ORDER BY,SKIP子句连用如本文档开始的栗子。

MATCH (p1:IP) WHERE p1.ipId=‘183.207.216.37’ WITH p1 MATCH (p1)<-[r1:userIp]-(u1:UserDate) WITH DISTINCT u1 RETURN count(u1) AS cnt

上例,查询IP节点’183.207.216.37’ WITH 保存节点,后续MATCH子句查询IP<-userIp-UserDate模式,WITH保存节点u1,并对节点去重,最后返回u1个数。

6.CREATE
CREATE创建节点/边,需要定义节点的类型和属性。

CREATE (u:IP {ipId: “127.0.0.1”}) RETURN u;
CREATE (i:IP {ipId: “127.0.0.2”})<-[r:userIp {count: -1}]-(u:UserDate {userDateId:“date1_sutao”}) RETURN u, i, r;

7.SET
SET用于更新节点或者边,先查询出需要更新的节点/边/属性,SET为一个新的值
MATCH (i:IP)<-[r:userIp]-(u:UserDate) WHERE i.ipId=“127.0.0.2” SET r.count=1000 RETURN r.count;

8.DELETE

DELETE 删除节点/边/属性

MATCH (i:IP)<-[r:userIp]-(u:UserDate) WHERE i.ipId=“127.0.0.2” DELETE r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值