Neo4j CQL 基本操作记录

记录一下本人在使用neo4j过程中遇到的一些cql操作,如果对您有帮助,那真是太荣幸了。(●’◡’●)【欢迎指出不当之处】


Neo4j数据库更改标签

MATCH (n:old_labels) 
REMOVE n:old_labels 
SET n:new_labels

Neo4j数据库更改节点属性名

MATCH (n:Node_Label) 
SET n.new_attribute=n.old_attribute 
REMOVE n.old_attribule

Neo4j更改关系类型

MATCH (n:Expert {name:"foo"})-[r:REL]->(m:Expert {name:"bar"})
CREATE (n)-[r2:NEWREL]->(m)
// copy properties, if necessary
SET r2 = r
WITH r
DELETE r
核心思想:添加新的,删除旧的

Neo4j数据库返回节点数量

MATCH (n:Node_Label) RETURN count(n)

Neo4j判断是否有重复节点

# 查询节点总数
match (n:PERSON) return count(n)
# 查询一个属性的去重数量
match (n:PERSON) return count(distinct n.name)  # 比较总数和去重后总数可判断是否存在相同name的节点

Neo4j获取重复节点

# 查询返回name相同但是节点ID不同的节点,n与m即为重复节点
match (n:PERSON),(m:PERSON) where n.name=m.name and id(n)<>id(m) return n,id(n),m,id(m);
# 比较重复节点的关系数量可只最先录入的节点的关系最为完整最多,后面录入的节点会缺少部分关系
# 以上一查询中返回的重复节点 id=12 和 id=460964 进行比较
match (n:PERSON)-[:FRIEND]-(m:PERSON) where id(n)=12 rerurn count(m);
match (n:PERSON)-[:FRIEND]-(m:PERSON) where id(n)=46096 rerurn count(m);

Neo4j合并重复节点

MATCH (n:Paper) 
WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count 
WHERE count > 1 
CALL apoc.refactor.mergeNodes(nodelist) YIELD node RETURN node
注1:此处用到apoc插件
  1. 下载apoc插接的jar包:https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases【注意区别 neo4j-3.5 和 neo4j-4】
  2. 将jar包放入neo4j安装目录中的plugins文件夹下
  3. 修改配置文件neo4j.conf
    3.1 dbms.security.procedures.unrestricted=apoc.*
    3.2 dbms.memory.pagecache.size=4g #增大页面缓存至4G,建议为20G
    3.3 dbms.memory.heap.initial_size=1g #JVM堆保存留内存从1G起
    3.4 dbms.memory.heap.max_size=4g #最大4G
  4. 重启neo4j
  5. 在浏览器可视化界面输入 return apoc.version(),如果出现对应的版本号,证明安装成功
注2:通过该方法合并节点后,关系会被保留指向同一个节点,如果出现了重复关系,可以参考下一个删除重复关系的方法

Neo4j删除重复关系

MATCH (a:Expert)-[r]->(b) 
WITH a, b, TAIL (COLLECT (r)) as rr 
WHERE size(rr)>0 
FOREACH (r IN rr | DELETE r)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值