在使用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. [Luogu] 家族

    https://www.luogu.org/problemnew/show/1767 字符串的读入有点麻烦 #include <cstdio> #include <cstring&g ...

  2. AtCoder Beginner Contest 128 F - Frog Jump

    题意 有一只青蛙,有\(0, 1, \cdots, N - 1\)个荷叶.每个荷叶上有权值\(s_i\). 选定\(A\), \(B\),初始分数为\(0\). 当前位置为\(x\): 对于\(y = ...

  3. 【概率论】1-4:事件的的并集(Union of Events and Statical Swindles)

    title: [概率论]1-4:事件的的并集(Union of Events and Statical Swindles) categories: Mathematic Probability key ...

  4. tarjan求强连通分量(模板)

    https://www.luogu.org/problem/P2341 #include<cstdio> #include<cstring> #include<algor ...

  5. String 类型的数据强转成int的方法

        有2个方法:1). int i = Integer.parseInt(str); 2). int i = Integer.valueOf(str).intValue();

  6. 树莓派中将caplock映射为esc键

    据说,喜欢vimer都呵caplock有仇,明明caplock占着原来esc的位置,却从来没有起到应有的作用,你说气人吗,没关系,我改啊:将下面语句加入到.bashrc中,启动即可xmodmap -e ...

  7. easyui复选框实现单选框

    $(':checkbox[name=primary_key_flag]').each(function(){ $(this).click(function(){ if(this.checked){ $ ...

  8. FIREDAC返回多结果集

    FIREDAC返回多结果集 以前使用ADO, 如果SQL返回的结果集有多个 可以通过NextRecordset来依次获取 代码移植到FireDAC, 对于多结果集处理差不多, 但是还是有一些不一样的地 ...

  9. Flutter移动电商实战 --(14)首页_拨打电话操作

    拨打电话的功能在app里也很常见,比如一般的外卖app都会有这个才做.其实Flutter本身是没给我们提供拨打电话的能力的,那我们如何来拨打电话那? 1.编写店长电话模块 这个小伙伴们一定轻车熟路了, ...

  10. python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式

    闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...