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

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

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:动态添加属性/设置动态属性相关推荐

  1. neo4j 添加属性_Neo4j:动态添加属性/设置动态属性

    neo4j 添加属性 我一直在研究一个具有英国国家铁路时刻表的数据集,它们以文本格式为您提供每列火车的出发和到达时间. 例如,可以这样创建代表停止的节点: CREATE (stop:Stop {arr ...

  2. 【JS】js给对象动态添加、设置、删除属性名和属性值

    1. 访问对象属性 js中访问对象属性一共有两种方法:点获取法和方括号获取法. let user = { // 一个对象name: "John", // 键 "name& ...

  3. 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。...

    概念: 并行:同时运行 并发:看似同时运行  json后任然中文的问题 import jsond = {"名字":"初恋这件小事"}new_d1 = json. ...

  4. Java动态生成类以及动态添加属性 本篇文章来源于 Linux公社网站(www.linuxidc.c

    2019独角兽企业重金招聘Python工程师标准>>> 有个技术实现需求:动态生成类,其中类中的属性来自参数对象中的全部属性以及来自参数对象propertities文件. 那么技术实 ...

  5. Runtime(动态添加属性)

    2019独角兽企业重金招聘Python工程师标准>>> 下面通过一个实例展示一下Runtime(动态添加属性)的用法 下面对运行时添加属性用到的策略参数进行补充: 这样看来,前面的N ...

  6. 我的Python学习笔记(四):动态添加属性和方法

    一.动态语言相关概念 1.1 动态语言 在运行时代码可以根据某些条件改变自身结构 可以在运行时引进新的函数.对象.甚至代码,可以删除已有的函数等其他结构上的变化 常见的动态语言:Object-C.C# ...

  7. Python面型对象--重载运算符与动态添加属性

    魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic methods).魔术方法在类 ...

  8. js给对象动态添加属性的2种方法

    js给对象动态添加属性的2种方法 需求: 要给每个课程添加一个判断鼠标是否hover 分析: 因为数据是动态渲染的,所以需要动态的给他添加一个flag标记,就得在数据渲染之前先拿到,然后再添加一个自己 ...

  9. vue脚手架的安装、生命周期、文件导入格式、局部组件和全局组件、动态添加属性和方法、插槽、传值

    -----------------------------------    DOS命令 进入dos:  win+r 切换盘符: d: 查看: dir 打开文件夹: cd 文件夹的名字 返回上一级目录 ...

最新文章

  1. C# - 基于LinkLabel可动态生成多超链接信息的自定义控件
  2. 微型计算机基础 教案,第一章微型计算机基础知识新080902电子教案(153页)-原创力文档...
  3. 在当当买了python怎么下载源代码-Python爬取当当网APP数据
  4. fedora18装一些软件及配置
  5. vue2中的过滤器filter怎样实现首字母大写
  6. mac 下载python库,Mac电脑安装python第三方库(就于python3)
  7. Flink State 最佳实践
  8. JAVA50道经典编程题
  9. 汇编语言:实验8分析一个奇怪的程序
  10. 离散事件模拟(银行业务模拟。实现算法3.6、3.7的程序)
  11. OpenCV+QT5在Window下的环境配置记录
  12. Java并发编程思维导图
  13. 考研报考人数的灰色模型
  14. c语言指针笔试面试题,c语言指针面试常见问题
  15. 2021年N1叉车司机新版试题及N1叉车司机模拟考试题库
  16. MPU6050加速度传感器学习笔记之实验《获取原始数据》
  17. 解决:禁止访问 (403) CSRF验证失败
  18. C++判断点是否在圆上
  19. python输入城市名称_python - 使用熊猫一次将多个城市名称格式化为每个城市的通用名称 - 堆栈内存溢出...
  20. 铝电解电容外型尺寸 和 LED 贴片封装

热门文章

  1. 一文搞定 Spring Data Redis 详解及实战
  2. java8 hash算法
  3. 回忆四班的那些事儿~
  4. Android中ImageView的旋转与缩放
  5. PHP WEB程序设计信息表,PHP WEB程序设计
  6. mysql外键引用语法_mysql – 外键语法
  7. 保定有国家承认的计算机学校吗,河北省122所大学名单,不在名单内的都是国家不承认的野鸡学校...
  8. 拼图游戏C语言课设实验报告,C语言拼图游戏实验报告.doc
  9. Scripting elements ( lt;%!, lt;jsp:declaration, lt;%=, lt;jsp:expression, 错误的解决方法
  10. java编译器API——使用编译工具