在使用Python操作Neo4j数据库的时候,经常会遇到重复的节点,需要将一个节点的属性复制到另一个节点,之后将该节点删除。

def copy_node_properties(source_node_id,target_node_id,graph=None):
"""
将节点 source_node_id 的属性复制到节点 target_node_id 上面
"""
if source_node_id is None or target_node_id is None:
return
if graph is None:
graph = get_graph()
#将源节点的所有的内容合并到目标节点
match = "match (x) where id(x)= %s or id(x)=%s return x " % (source_node_id,target_node_id)
result = graph.run(match).data()
if result is not None and len(result) == 2 and result[0]["x"] is not None and len(result[0]["x"].nodes) > 0 and result[1]["x"] is not None and len(result[1]["x"].nodes) > 0:
n1 = result[0]["x"].nodes[0]
n2 = result[1]["x"].nodes[0]
to_merge_node = n1 if n1.identity == target_node_id else n2
source_node = n1 if n1.identity == source_node_id else n2
#复制标签到目标节点
target_node_labels = []
if to_merge_node.labels is not None:
for a in to_merge_node.labels:
target_node_labels.append(a)
to_add_labels = []
if source_node.labels is not None:
for a in source_node.labels:
if a not in target_node_labels:
temp = "set x:" + a
to_add_labels.append(temp) #复制属性信息
fields = []
for k,v in source_node.items():
if v is None:
continue
if k in to_merge_node:
if to_merge_node[k] is None:
continue
if to_merge_node[k] == v:
continue
max = v if len(v) > len(to_merge_node[k]) else to_merge_node[k]
min = v if len(v) < len(to_merge_node[k]) else to_merge_node[k]
v = max if max.find(min) >= 0 else to_merge_node[k] + "/" + v
temp = "set x.%s = '%s'" % (k,v)
fields.append(temp)
if len(fields) ==0 and len(to_add_labels)==0:
return True
fields_str = " ".join(fields)
labels_str = " ".join(to_add_labels) match = "match (x) where id(x)= %s %s %s return x " % (target_node_id,labels_str,fields_str)
result = graph.run(match).data()
if result is not None and len(result) > 0:
return True
else:
return False
return

  

neo4j 将一个节点的属性复制到另一个节点上的更多相关文章

  1. bean属性复制到另外一个bean

    import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(maker.getBaseInfo(), newBasInfo ...

  2. 转:zTree高级入门:如何通过扩展节点的属性来达到是否显示节点的删除编辑等图标(按钮)

    当我们在使用ztree树组件的节点编辑功能时,只要我们引入了ztree相关节点编辑的js脚本文件: <script type="text/javascript" src=”/ ...

  3. sqlserver -- 学习笔记(四)将一个数据库的表复制到另外一个数据库(备忘)

    --复制结构+数据 select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 select * into Stockholder.dbo.SHInfo from dsp ...

  4. linux利用命令将一个盘上的所有复制到另一个盘上

    1.fdisk -l 查看硬盘状况 2.将目标盘利用mount挂载 3.查看硬盘使用状况,看目标盘是否有足够的空间:df -h 4.如果足够,利用dd命令将源盘数据拷贝到目标盘:dd if=/dev/ ...

  5. jquery中关于append()的用法笔记---append()节点移动与复制之说

    jquery中关于append()的用法笔记---append()节点移动与复制之说 今天看一本关于jquery的基础教程,看到其中一段代码关于append()的一行,总是百思不得其解.于是查了查官方 ...

  6. VC++ MFC工程中中如何将一个工程的资源(如对话框)复制到另外一个工程

    问题的提出:在工程1中用到的资源,在工程2中已有现成的.即工程1中要用到的对话框和工程2的完全相同,而工程2中对该对话框的布局已设计好.控件变量都绑定好了.但由于该对话框的控件特别多,如果在工程1中再 ...

  7. JS 节点的属性 与 元素

    节点的属性{     nodeType 是节点的类型:     nodeNam 是节点的名字     nodeValue 节点的值 }可以用节点.属性 取得三个属性的值 节点.nodeType 出来的 ...

  8. Springboot集成MapperFactory(ma.glasnost.orika.MapperFactory)类属性复制

    一.导入Jar() gradle方式 compile group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.1' maven方式 ...

  9. 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点

    红黑树插入删除 具体参考:红黑树原理以及插入.删除算法 附图例说明   (阿里的高德一直追着问) 或者插入的情况参考:红黑树原理以及插入.删除算法 附图例说明 红黑树与AVL树 红黑树 的时间复杂度 ...

随机推荐

  1. learning express step(十四)

    learning express error handle code: const express = require('express'); const app = express(); const ...

  2. Ubuntu 16.04 下Redis Cluster集群搭建

    实际操作如下: 准备工作 版本:4.0.2 下载地址:https://redis.io/download 离线版本:(链接: https://pan.baidu.com/s/1bpwDtOr 密码: ...

  3. 1.1 OC class new summary

    1.http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html 2.How to create a oc class? 3. 3.1 In ...

  4. ROS机器人开发实践学习笔记1

    刚刚开始学习ROS,打算入机器人的坑了,参考教材是<ROS及其人开发实践>胡春旭编著 机械工业出版社 华章科技出品.本来以为可以按照书上的步骤一步步来,但是,too young to si ...

  5. 夺命连环问:一个 TCP 连接可以发多少个 HTTP 请求?

    曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式.什 ...

  6. 一个XP SP3调用0地址蓝屏BUG

    0x00 蓝屏的堆栈 在XP SP3上跑POC之后,一段时间之后会出现蓝屏,蓝屏的堆栈如下,可以看出是ACKData里面CALL了一个0指针导致的蓝屏 0x01 蓝屏原因 1 ETW(Event Tr ...

  7. Windows系统配置Redis密码

    1.首先停止Redis服务,直接关掉Redis或者打开任务管理器查看有没有redis-server进程,有的话选中并结束任务. 2.打开配置文件redis.windows.conf和redis.win ...

  8. IDEA配置Hadoop开发环境&编译运行WordCount程序

    有关hadoop及java安装配置请见:https://www.cnblogs.com/lxc1910/p/11734477.html 1.新建Java project: 选择合适的jdk,如图所示: ...

  9. tp中打印sql,查看语句信息

    $a = self::where($where)->fetchSql(true)->select(); dump($a);

  10. legend3---lavarel常用操作代码2

    legend3---lavarel常用操作代码2 一.总结 一句话总结: 对于王思cong被执法人的感悟:失意时 莫心伤,得意时 莫膨胀 1.lavarel自动事务? DB::transaction方 ...