Neo4j:空值如何工作?

我时不时地发现自己想将CSV文件导入Neo4j,而我总是对如何处理可能潜伏在其中的各种空值感到困惑。

让我们从一个没有CSV文件的示例开始。 考虑以下列表,以及我尝试仅返回空值的尝试:

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
WITH value WHERE value = null
RETURN value(no changes, no records)

WITH [null,“ null”,“”,“ Mark”] AS值UNWIND值AS值WITH值WHERE值= null RETURN值(无更改,无记录)

嗯,这很奇怪。 我曾期望至少将第一个值保留在集合中。 如果我们做相反的事情呢?

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
WITH value WHERE value <> null
RETURN value(no changes, no records)

WITH [null,“ null”,“”,“ Mark”] AS值UNWIND值AS值WITH值WHERE值<> null RETURN值(无更改,无记录)

依然没有! 让我们尝试返回比较的输出,而不是过滤行:

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
RETURN value = null AS outcome╒═══════╤═════════╕
│"value"│"outcome"│
╞═══════╪═════════╡
│null   │null     │
├───────┼─────────┤
│"null" │null     │
├───────┼─────────┤
│""     │null     │
├───────┼─────────┤
│"Mark" │null     │
└───────┴─────────┘

好的,这不是我们所期望的。 一切都有“空”的“结果”! 如果我们要检查值是否为字符串“ Mark”,该怎么办?

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
RETURN value = "Mark" AS outcome╒═══════╤═════════╕
│"value"│"outcome"│
╞═══════╪═════════╡
│null   │null     │
├───────┼─────────┤
│"null" │false    │
├───────┼─────────┤
│""     │false    │
├───────┼─────────┤
│"Mark" │true     │
└───────┴─────────┘

通过执行此查询,我们了解到,如果比较的一侧为null,则返回值将始终为null。

那么,如果行为空,我们如何排除呢?

事实证明,我们必须使用'is'关键字而不是使用等于运算符。 让我们看看它是什么样的:

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
WITH value WHERE value is null
RETURN value╒═══════╕
│"value"│
╞═══════╡
│null   │
└───────┘

和积极的情况:

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
WITH value WHERE value is not null
RETURN value╒═══════╕
│"value"│
╞═══════╡
│"null" │
├───────┤
│""     │
├───────┤
│"Mark" │
└───────┘

如果我们想摆脱空字符串怎么办?

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
WITH value WHERE value <> ""
RETURN value╒═══════╕
│"value"│
╞═══════╡
│"null" │
├───────┤
│"Mark" │
└───────┘

有趣的是,这也摆脱了我没想到的空值。 但是,如果我们寻找与空字符串匹配的值:

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
WITH value WHERE value = ""
RETURN value╒═══════╕
│"value"│
╞═══════╡
│""     │
└───────┘

也不在那里! 嗯,这是怎么回事:

WITH [null, "null", "", "Mark"] AS values
UNWIND values AS value
RETURN value, value = "" AS isEmpty, value <> "" AS isNotEmpty╒═══════╤═════════╤════════════╕
│"value"│"isEmpty"│"isNotEmpty"│
╞═══════╪═════════╪════════════╡
│null   │null     │null        │
├───────┼─────────┼────────────┤
│"null" │false    │true        │
├───────┼─────────┼────────────┤
│""     │true     │false       │
├───────┼─────────┼────────────┤
│"Mark" │false    │true        │
└───────┴─────────┴────────────┘

除非我们显式检查值“为空”,否则对于每种等式匹配,空值似乎都会被过滤掉。

那么,当我们使用Neo4j的LOAD CSV工具解析CSV文件时,如何利用这些知识呢?

假设我们有一个CSV文件,如下所示:

$ cat nulls.csv
name,company
"Mark",
"Michael",""
"Will",null
"Ryan","Neo4j"

$ cat nulls.csv名称,公司“ Mark”,“ Michael”,“” Will”,空“ Ryan”,“ Neo4j”

因此,前三行都没有“ company”的值。 我根本没有任何值,Michael有一个空字符串,Will有一个空值。 让我们看看LOAD CSV是如何解释的:

load csv with headers from "file:///nulls.csv" AS row
RETURN row╒═════════════════════════════════╕
│"row"                            │
╞═════════════════════════════════╡
│{"name":"Mark","company":null}   │
├─────────────────────────────────┤
│{"name":"Michael","company":""}  │
├─────────────────────────────────┤
│{"name":"Will","company":"null"} │
├─────────────────────────────────┤
│{"name":"Ryan","company":"Neo4j"}│
└─────────────────────────────────┘

我们已经从上面全面了解了所有组合。 我们想为每行创建一个Person节点,但仅在定义了实际公司的情况下才创建Company节点和关联的“ WORKS_FOR”关系hp –我们不想创建一个空公司。

因此,我们只想为Ryan行创建一个公司节点和'WORKS_FOR'关系。

以下查询可以解决问题:

load csv with headers from "file:///nulls.csv" AS row
MERGE (p:Person {name: row.name})
WITH p, row
WHERE row.company <> "" AND row.company <> "null"
MERGE (c:Company {name: row.company})
MERGE (p)-[:WORKS_FOR]->(c)Added 5 labels, created 5 nodes, set 5 properties, created 1 relationship, statement completed in 117 ms.

使用“ file:///nulls.csv”中的标头加载csv AS行合并(p:Person {name:row.name})WITH p,row WHERE row.company <>“” AND row.company <>“ null ” MERGE(c:Company {name:row.company})MERGE(p)-[:WORKS_FOR]->(c)添加了5个标签,创建了5个节点,设置了5个属性,创建了1个关系,语句在117毫秒内完成。

如果我们可视化所创建的内容:

完善。 也许这种行为是显而易见的,但它总是让我感到震惊,因此希望它对其他人也有用!

翻译自: https://www.javacodegeeks.com/2017/02/neo4j-null-values-even-work.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

楼层钢筋验收会议纪要_钢筋施工质量通病防治

一、钢筋原材1、钢筋表面出现黄色浮锈&#xff0c;严重转为红色&#xff0c;日久后变成暗褐色&#xff0c;甚至发生鱼鳞片剥落现象。图片原因保管不良&#xff0c;受到雨雪侵蚀&#xff0c;存放期长&#xff0c;仓库环境潮湿&#xff0c;通风不良。防 治 措 施1、钢筋原料应存放…

simulink代码生成(一)——环境搭建

一、安装C2000的嵌入式环境&#xff1b; 点击matlab附加功能&#xff0c; 然后搜索C2000&#xff0c;安装嵌入式硬件支持包&#xff1b;点击安装即可&#xff1b;&#xff08;目前还不知道破解版的怎么操作&#xff0c;目前我用的是正版的这样&#xff0c;完全破解的可能操作…

五步法颈椎病自我按摩图解

​​1.揉捏颈、肩、臂 操作&#xff1a;自我按摩时取坐位。拇指张开&#xff0c;其余四指并拢&#xff0c;虎口相对用力&#xff0c;自枕部开始沿颈椎棘突两旁的肌肉向下揉捏&#xff0c;至上背部手能摸到之处为止。反复揉捏3分钟&#xff0c;然后以相同手法揉捏患侧上肢和颈部…

tf.one_hot

tf.one_hot(indices,#输入&#xff0c;这里是一维的depth,# one hotdimension.on_valueNone,#output 默认1off_valueNone,#output 默认0axisNone,#根据我的实验&#xff0c;默认为1dtypeNone,nameNone) 测试程序&#xff0c;一般说&#xff0c;有几类&#xff0c;depth等于分类…

使用get set方法添减属性_头皮银屑病“克星”使用方法,你GET了吗?

相信小伙伴们最近都了解了治疗头皮银屑病需要使用专业剂型。但...方法不对&#xff0c;心血白费。头皮银屑病专用剂型的正确使用方法&#xff0c;你真的知道吗&#xff1f;快来和利奥娜一起&#xff0c;Get√正确的使用方法吧&#xff01;适合头皮银屑病的专用药剂1.复方制剂卡…

spring hsqldb_在Spring中嵌入HSQLDB服务器实例

spring hsqldb我一直在愉快地使用XAMPP进行开发&#xff0c;直到不得不将其托管在可通过Internet访问的某个地方&#xff0c;供客户端进行测试和使用。 我有一个仅具有384 RAM的VPS&#xff0c;并且需要快速找到方法&#xff0c;因此决定将XAMPP安装到VPS中。 由于内存较低&…

线性回归,logistic回归和一般回归

http://www.cnblogs.com/riskyer/p/3217601.html转载于:https://www.cnblogs.com/focus-z/p/10822757.html

double小数点后最多几位_基金理财买入后,不断亏损,是最多本金亏光,还是会出现负值...

投资基金不会把本金亏光&#xff0c;更不会倒贴钱&#xff0c;基金是一篮子股票&#xff0c;个别股票或许有黑天鹅事件&#xff0c;不可能全部同时出现&#xff0c;持续亏损的话&#xff0c;可能最后面临清盘&#xff0c;有结算流程&#xff0c;会将剩下的份额折算到投资者的账…

tf.layers.flatten

flatten( inputs, nameNone) 参数说明如下&#xff1a; inputs&#xff1a;必需&#xff0c;即输入数据。name&#xff1a;可选&#xff0c;默认为 None&#xff0c;即该层的名称。

JUnit 5 –参数化测试

JUnit 5令人印象深刻&#xff0c;尤其是当您深入研究扩展模型和体系结构时 。 但是从表面上讲&#xff0c;编写测试的地方&#xff0c;开发的过程比革命的过程更具进化性 – JUnit 4上没有杀手级功能吗&#xff1f; 幸运的是&#xff0c;至少有一个&#xff1a;参数化测试。 JU…

RMQ问题-ST表倍增处理静态区间最值

简介 ST表是利用倍增思想处理RMQ问题&#xff08;区间最值问题&#xff09;的一种工具。 它能够做到O(nlogn)预处理&#xff0c;O(1)查询的时间复杂度&#xff0c;效率相当不错。 算法 1.预处理 ST表利用倍增的思想。以洛谷的P3865作为例子。我们需要查询某一区间的最大值。 我…

tf.layers.dropout

dropout 是指在深度学习网络的训练过程中&#xff0c;对于神经网络单元&#xff0c;按照一定的概率将其暂时从网络中丢弃&#xff0c; 可以用来防止过拟合&#xff0c;layers 模块中提供了 tf.layers.dropout() 方法来实现这一操作&#xff0c;定义在 tensorflow/python/layers…

nginx是干嘛用的_nginx小技巧 -非root身份运行nginx

简直罪过&#xff0c;写这篇文章完全是一场毫无意义的口水仗引起的&#xff0c;我这人就这样&#xff0c;喜欢拿事实说话&#xff0c;而不是一句话说的让人摸不着头脑&#xff01;下载源码文件&#xff1a;wget http://nginx.org/download/nginx-1.16.1.tar.gz解压&#xff1a;…

pooling池化

pooling&#xff0c;即池化&#xff0c;layers 模块提供了多个池化方法&#xff0c;这几个池化方法都是类似的&#xff0c;包括 tf.layers.max_pooling1d()、tf.layers.max_pooling2d()、tf.layers.max_pooling3d()、tf.layers.average_pooling1d()、tf.layers.average_pooling…

mysql 数据迁移_MySQL海量数据迁移

数据库迁移本主前一段时间写毕业设计主要使用MySQL&#xff0c;紧锣密鼓的开发了将近一个多月&#xff0c;项目数据层、接口层、数据采集层已经开发完成&#xff0c;算法还在不断的优化提速&#xff0c;由于请了几位大佬帮我做Code Review&#xff0c;所以不得已购买了一个阿里…

数组中重复的数字

解决问题思路1. 代码实现&#xff1a; package j2;import java.util.Arrays;/*** Created by admin on 2019/5/8.*/ public class FindDuplicate {public static void duplicate(int[] numbers,int length,int[]duplication){//边界条件的判断if (numbers null || length0) {r…

eclipse中junit_在Eclipse中有效使用JUnit

eclipse中junit最近&#xff0c;我被卷入了讨论1和一些受感染的同伴2&#xff0c;他们关于我们如何在Eclipse IDE中使用JUnit 。 令人惊讶的是&#xff0c;对话带来了并非所有人都知道的一些“技巧”。 这使我有了写这篇文章的想法&#xff0c;总结了我们的演讲。 谁知道–也许…

BFS迷宫问题模型(具体模拟过程见《啊哈算法》)

题目描述与DFS模型走迷宫那篇一样。小哈被困在迷宫里&#xff0c;小哼解救小哈。 这里用BFS来写。BFS&#xff08;广搜&#xff09;与DFS&#xff08;深搜&#xff09;的区别就在于&#xff0c;DFS是“不撞南墙不回头”&#xff0c;一条路走到不能再走之后才会回到起始点&#…

Spring Batch可重启性

首先&#xff0c;我要非常感谢Spring的优秀人员&#xff0c;他们花了无数时间来确保Spring Batch作业的可行性&#xff0c;以及发出重新启动作业的神奇能力&#xff01; 感谢您提供的这个优雅的工具集&#xff0c;它使我们能够浏览大量数据集&#xff0c;同时使我们在跌倒时能够…

tf.clip_by_value()

tf.clip_by_value(A, min, max) 输入一个张量A&#xff0c;把A中的每一个元素的值都压缩在min和max之间。 小于min的让它等于min&#xff0c;大于max的元素的值等于max。