我正在使用 Neo4j 关联从官方政府文件中提取的数据,并且我正在开发一个 Python 程序来自动化此过程。但是,在某些情况下会提取更通用的实体,例如
(:Position {symbol: "xxx", name: "yyy", effective: false})
。当我尝试使用如下查询将其插入数据库时:
MERGE (c:Position {symbol: "xxx", name: "yyy", effective: false})
RETURN ID(c)
MERGE
子句最终匹配类型为(:Position {symbol: "xxx", name: "yyy", location:"zzz", effective: false})
的节点。
如何修改我的 Cypher 查询以确保节点
(c:Position {symbol: "xxx", name: "yyy", effective: false})
插入到数据库中?在这种情况下,单独使用 CREATE
是不够的,因为可能会再次提取相似的节点。
我在这篇文章中遇到了类似的问题。但是,提供的解决方案在我的情况下不起作用,因为
WHERE
子句不返回任何内容。
MERGE
不适合您的用例。这是确保存在具有您想要的属性集的 Position
节点的一种方法。该查询假设所需的属性以 props
参数 的形式传递给查询(例如,{symbol: "xxx", name: "yyy", location:"zzz", effective: false}
)
OPTIONAL MATCH (p:Position)
WHERE PROPERTIES(p) = $props
CALL {
WITH p
WITH p WHERE p IS NULL
CREATE (q:Position)
SET q = $props
RETURN q AS result
UNION
WITH p
WITH p WHERE p IS NOT NULL
RETURN p AS result
}
RETURN ID(result)