neo4j 添加属性

我一直在研究一个具有英国国家铁路时刻表的数据集,它们以文本格式为您提供每列火车的出发和到达时间。

例如,可以这样创建代表停止的节点:

CREATE (stop:Stop {arrival: "0802", departure: "0803H"})

该时间格式不是特别适合查询,因此我想添加另一个属性,该属性指示自一天开始以来的秒数。

因此,我们想向节点添加“ arrivalSecondsSinceStartOfDay”和“ departureSecondsSinceStartOfDay”属性。 我编写了以下查询来计算这些属性的值。

MATCH (stop:Stop)
UNWIND ["arrival", "departure"] AS keyWITH key,toInteger(substring(stop[key], 0, 2)) AS hours,          toInteger(substring(stop[key], 2, 2)) AS minutes,CASE WHEN substring(stop[key], 4,1) = "H" THEN 30 ELSE 0 END AS secondsWITH key, (hours * 60 * 60) + (minutes * 60) + seconds AS secondsSinceStartOfDayRETURN key + "SecondsSinceStartOfDay" AS newKey, secondsSinceStartOfDay
╒═══════════════════════════════╤══════════════════════╕
│newKey                         │secondsSinceStartOfDay│
╞═══════════════════════════════╪══════════════════════╡
│arrivalSecondsSinceStartOfDay  │28920                 │
├───────────────────────────────┼──────────────────────┤
│departureSecondsSinceStartOfDay│29010                 │
└───────────────────────────────┴──────────────────────┘

现在我们准备在“停止”节点上设置这些属性。

MATCH (stop:Stop2)
UNWIND ["arrival", "departure"] AS keyWITH stop,key,toInteger(substring(stop[key], 0, 2)) AS hours,          toInteger(substring(stop[key], 2, 2)) AS minutes,CASE WHEN substring(stop[key], 4,1) = "H" THEN 30 ELSE 0 END AS secondsWITH stop, key, (hours * 60 * 60) + (minutes * 60) + seconds AS secondsSinceStartOfDay
WITH stop, key + "SecondsSinceStartOfDay" AS newKey, secondsSinceStartOfDay
SET stop[newKey] = secondsSinceStartOfDay
Invalid input '[': expected an identifier character, whitespace, '{', node labels, a property map, a relationship pattern, '.', '(', '=' or "+=" (line 12, column 9 (offset: 447))
"SET stop[newKey] = secondsSinceStartOfDay"^

嗯,没有按预期工作! 看起来我们还不能使用Cypher设置动态属性。

幸运的是,我的同事Michael Hunger和Neo4j社区一直在管理APOC程序库,并且该程序正是可以帮助我们的程序。

您需要下载适用于您的Neo4j版本的jar ,然后将其放在plugins目录中。 我正在使用Neo4j 3.1 Beta1,因此对我来说是这样的:

$ tree neo4j-enterprise-3.1.0-BETA1/plugins/neo4j-enterprise-3.1.0-BETA1/plugins/
└── apoc-3.1.0.1-all.jar0 directories, 1 file

完成之后,您将需要重新启动Neo4j,以便它可以采用我们添加的新过程。 完成后,执行以下查询以检查它们是否正确安装:

call dbms.procedures()
YIELD name
WITH name
WHERE name STARTS WITH "apoc"
RETURN COUNT(*)
╒════════╕
│COUNT(*)│
╞════════╡
│183     │
└────────┘

现在,我们准备在图中动态设置属性。 我们将使用的过程是apoc.create.setProperty ,很容易更新查询以使用它:

MATCH (stop:Stop)
UNWIND ["arrival", "departure"] AS keyWITH stop,key,toInteger(substring(stop[key], 0, 2)) AS hours,          toInteger(substring(stop[key], 2, 2)) AS minutes,CASE WHEN substring(stop[key], 4,1) = "H" THEN 30 ELSE 0 END AS secondsWITH stop, key, (hours * 60 * 60) + (minutes * 60) + seconds AS secondsSinceStartOfDay
WITH stop, key + "SecondsSinceStartOfDay" AS newKey, secondsSinceStartOfDay
CALL apoc.create.setProperty(stop, newKey, secondsSinceStartOfDay)
Query cannot conclude with CALL (must be RETURN or an update clause) (line 12, column 1 (offset: 439))
"CALL apoc.create.setProperty(stop, newKey, secondsSinceStartOfDay)"^

糟糕,我讲得太早了! 我们需要产生过程的return列并返回它,或者只是返回一个计数来解决此问题:

MATCH (stop:Stop)
UNWIND ["arrival", "departure"] AS keyWITH stop,key,toInteger(substring(stop[key], 0, 2)) AS hours,          toInteger(substring(stop[key], 2, 2)) AS minutes,CASE WHEN substring(stop[key], 4,1) = "H" THEN 30 ELSE 0 END AS secondsWITH stop, key, (hours * 60 * 60) + (minutes * 60) + seconds AS secondsSinceStartOfDay
WITH stop, key + "SecondsSinceStartOfDay" AS newKey, secondsSinceStartOfDay
CALL apoc.create.setProperty(stop, newKey, secondsSinceStartOfDay)
YIELD node
RETURN COUNT(*)
╒════════╕
│COUNT(*)│
╞════════╡
│2       │
└────────┘

就是这样,我们现在可以在查询中动态设置属性。

翻译自: https://www.javacodegeeks.com/2016/10/neo4j-dynamically-add-propertyset-dynamic-property.html

neo4j 添加属性

neo4j 添加属性_Neo4j:动态添加属性/设置动态属性相关推荐

  1. 【17】有关python面向对象编程的提高【多继承、多态、类属性、动态添加与限制添加属性与方法、@property】...

    一.多继承 案例1:小孩继承自爸爸,妈妈.在程序入口模块再创建实例调用执行 #father模块 class Father(object):def __init__(self,money):self.m ...

  2. js生成div后添加html(),JS动态添加div,然后在div中添加元素

    先是放一个空的div,让后根据指标的数据,动态的往div中添加元素. 动态往div中添加元素: for (var n = 0; n < data.length; n++) { //获取div v ...

  3. python动态添加类方法_Python 动态添加类方法

    习题: 1. Shape基类,要求所有子类都必须提供面积的计算,子类有三角形.矩形.圆. 2. 上题圆类的数据可序列化 第一种方法:使用Mixin多继承组合的方式,混入其它类的属性和方法 第二种方法: ...

  4. 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)

    前言:以前曾写过一篇关于动态生成控件的文章<动态添加控件及将某XML动态加入到Activity显示>,比较浅显,对于RelativeLayout的相关布局设置方法及相对布局与线性布局的混合 ...

  5. php动态添加查询,php动态添加url查询参数的方法,php动态url参数_PHP教程

    php动态添加url查询参数的方法,php动态url参数 本文实例讲述了php动态添加url查询参数的方法.分享给大家供大家参考.具体分析如下: 这段代码可以动态为url添加key-value查询参数 ...

  6. layui option 动态添加_layui select动态添加option的实例

    html 产品类别 轻松融 容易融 快乐融 增加产品类别 js //重新渲染表单 function renderForm(){ layui.use('form', function(){ var fo ...

  7. layui option 动态添加_layuiselect如何动态添加option

    这次给大家带来layui select如何动态添加option,layui select动态添加option的注意事项有哪些,下面就是实战案例,一起来看一下. html 产品类别 轻松融 容易融 快乐 ...

  8. java动态添加属性_java – 动态添加对象的属性

    你好: 在我们的应用程序中,我们从数据库中检索了一些数据,例如,表格中包含以下字符:id,name,age,address,email. 然后我们将根据客户获得一些这些属性. 如果客户端需要id,na ...

  9. 遍历json 对象的属性并且动态添加属性

    昨天因为公司的一个需求,所以就研究了一下json对象的属性的遍历和动态修改: var person= { name: 'zhangsan', pass: '123' , 'sni.ni' : 'sss ...

  10. js遍历对象的属性并且动态添加属性

    Java代码 varperson={ name:'zhangsan', pass:'123', 'sni.ni':'sss', hello:function(){ for(vari=0;i<ar ...

最新文章

  1. 知识图谱实体链接是什么?一份“由浅入深”的综述
  2. 科技下的仓库,数据库
  3. android ge模拟器,在Android模拟器上的一些小陷阱
  4. 为什么Spring Boot项目引入依赖的时候可以不指定依赖的版本号
  5. boost::lockfree::stack用法的测试程序
  6. 微型计算机在工作过程中突然遇到电源中断,微型计算机在工作过程中突然遇到电源中断,则计算机 中的信息将全部丢失,再次接通电源后也不能恢复数据。...
  7. 循环序列模型 —— 1.3循环神经网络
  8. 创建表时参数PCTFREE和PCTUSED是什么意思?
  9. Openstack学习笔记(十五)-Horizon源代码学习笔记(五)
  10. 如何彻底关闭FF新推荐弹出广告
  11. 获CNNVD感谢信!知道创宇以专业漏洞研究能力支撑“漏洞通报”业务
  12. 压力测试-Jmeter
  13. 日期转毫秒,毫秒转日期
  14. 三大面试技巧,平常就能练起来!
  15. 基于51单片机的红外报警实验
  16. ac2100 反弹shell无法粘贴_【1029精简稳定版OpenWrt】红米&小米AC2100|帕斯沃|多拨|SmartD...
  17. MikTex+texworks插入数学公式示例
  18. 第三方android 模拟器哪个好用吗,PC安卓模拟器哪个好用 电脑手游助手模拟器测评排行...
  19. Java 实现多继承
  20. 标题使用java计算三维空间中两点的欧几里德距离

热门文章

  1. [CQOI]九连环(FFT优化+高精)
  2. jzoj6287-扭动的树【区间dp】
  3. P3934-Nephren Ruq Insania【欧拉定理,树状数组】
  4. POJ1821-Fence【单调队列,dp】
  5. ssl1626-花店橱窗布置【日常dp】
  6. JavaFX图表(五)之气泡图
  7. 漫画:什么是八皇后问题
  8. StringTokenizer的使用
  9. 漫画:什么是MD5算法
  10. 【Android布局】控件布置