如皋做公司网站,百度链接提交,wordpress页面无法显示,北京建设工程招标信息网站我时不时地发现自己想将CSV文件导入Neo4j#xff0c;而我总是对如何处理可能潜伏在其中的各种空值感到困惑。 让我们从一个没有CSV文件的示例开始。 考虑以下列表#xff0c;以及我尝试仅返回空值的尝试#xff1a; WITH [null, null, , Ma… 我时不时地发现自己想将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行合并pPerson {namerow.name}WITH prow WHERE row.company “” AND row.company “ null ” MERGEcCompany {namerow.company}MERGEp-[WORKS_FOR]-c添加了5个标签创建了5个节点设置了5个属性创建了1个关系语句在117毫秒内完成。 如果我们可视化所创建的内容 完善。 也许这种行为是显而易见的但它总是让我感到震惊因此希望它对其他人也有用 翻译自: https://www.javacodegeeks.com/2017/02/neo4j-null-values-even-work.html