Cypher完全匹配属性

时间:2015-04-30 21:47:11

标签: neo4j cypher

假设我在数据库中有一个标签L和多个随机属性A = B,C = D等的节点。我想合并数据库中的另一个节点,标签为L但仅具有A = B的属性。

对于当前的Cypher,我可以做一个简单的事情:

 merge (node:L {A:B}) return node

但是,由于匹配/合并会考虑具有这些属性的任何节点,因此它将合并到第一个节点中。有没有办法让这个完全匹配?我在考虑做一些像

这样的事情
merge (node:L {props}) where {props} == {all node's props}

但列出所有节点道具的功能虽然位于top five ideas上,但不存在。

1 个答案:

答案 0 :(得分:1)

如果在确定是否存在任何匹配项(创建节点之前)时确切地知道要排除哪些属性名称,则可以执行以下操作。在此示例中,在确定是否存在匹配时要排除的属性是" C"," D"和" E"。

OPTIONAL MATCH (node:L {A: "B"})
WHERE NOT (has(node.C) OR has(node.D) OR has(node.E))
WITH (CASE WHEN node IS NULL THEN [1] ELSE [] END) AS cn
FOREACH (x IN cn | CREATE (:L {A: "B"}))
RETURN cn[0];

如果节点已创建,则返回值为1;如果不是,则返回null