neo4j 添加属性_Neo4j:动态添加属性/设置动态属性
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:动态添加属性/设置动态属性相关推荐
- 【17】有关python面向对象编程的提高【多继承、多态、类属性、动态添加与限制添加属性与方法、@property】...
一.多继承 案例1:小孩继承自爸爸,妈妈.在程序入口模块再创建实例调用执行 #father模块 class Father(object):def __init__(self,money):self.m ...
- js生成div后添加html(),JS动态添加div,然后在div中添加元素
先是放一个空的div,让后根据指标的数据,动态的往div中添加元素. 动态往div中添加元素: for (var n = 0; n < data.length; n++) { //获取div v ...
- python动态添加类方法_Python 动态添加类方法
习题: 1. Shape基类,要求所有子类都必须提供面积的计算,子类有三角形.矩形.圆. 2. 上题圆类的数据可序列化 第一种方法:使用Mixin多继承组合的方式,混入其它类的属性和方法 第二种方法: ...
- 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
前言:以前曾写过一篇关于动态生成控件的文章<动态添加控件及将某XML动态加入到Activity显示>,比较浅显,对于RelativeLayout的相关布局设置方法及相对布局与线性布局的混合 ...
- php动态添加查询,php动态添加url查询参数的方法,php动态url参数_PHP教程
php动态添加url查询参数的方法,php动态url参数 本文实例讲述了php动态添加url查询参数的方法.分享给大家供大家参考.具体分析如下: 这段代码可以动态为url添加key-value查询参数 ...
- layui option 动态添加_layui select动态添加option的实例
html 产品类别 轻松融 容易融 快乐融 增加产品类别 js //重新渲染表单 function renderForm(){ layui.use('form', function(){ var fo ...
- layui option 动态添加_layuiselect如何动态添加option
这次给大家带来layui select如何动态添加option,layui select动态添加option的注意事项有哪些,下面就是实战案例,一起来看一下. html 产品类别 轻松融 容易融 快乐 ...
- java动态添加属性_java – 动态添加对象的属性
你好: 在我们的应用程序中,我们从数据库中检索了一些数据,例如,表格中包含以下字符:id,name,age,address,email. 然后我们将根据客户获得一些这些属性. 如果客户端需要id,na ...
- 遍历json 对象的属性并且动态添加属性
昨天因为公司的一个需求,所以就研究了一下json对象的属性的遍历和动态修改: var person= { name: 'zhangsan', pass: '123' , 'sni.ni' : 'sss ...
- js遍历对象的属性并且动态添加属性
Java代码 varperson={ name:'zhangsan', pass:'123', 'sni.ni':'sss', hello:function(){ for(vari=0;i<ar ...
最新文章
- 知识图谱实体链接是什么?一份“由浅入深”的综述
- 科技下的仓库,数据库
- android ge模拟器,在Android模拟器上的一些小陷阱
- 为什么Spring Boot项目引入依赖的时候可以不指定依赖的版本号
- boost::lockfree::stack用法的测试程序
- 微型计算机在工作过程中突然遇到电源中断,微型计算机在工作过程中突然遇到电源中断,则计算机 中的信息将全部丢失,再次接通电源后也不能恢复数据。...
- 循环序列模型 —— 1.3循环神经网络
- 创建表时参数PCTFREE和PCTUSED是什么意思?
- Openstack学习笔记(十五)-Horizon源代码学习笔记(五)
- 如何彻底关闭FF新推荐弹出广告
- 获CNNVD感谢信!知道创宇以专业漏洞研究能力支撑“漏洞通报”业务
- 压力测试-Jmeter
- 日期转毫秒,毫秒转日期
- 三大面试技巧,平常就能练起来!
- 基于51单片机的红外报警实验
- ac2100 反弹shell无法粘贴_【1029精简稳定版OpenWrt】红米&小米AC2100|帕斯沃|多拨|SmartD...
- MikTex+texworks插入数学公式示例
- 第三方android 模拟器哪个好用吗,PC安卓模拟器哪个好用 电脑手游助手模拟器测评排行...
- Java 实现多继承
- 标题使用java计算三维空间中两点的欧几里德距离