gpt4 book ai didi

java - neo4j cypher,尝试使用 ID(n) 更新和删除时出现奇怪的错误

转载 作者:行者123 更新时间:2023-12-02 05:37:31 24 4
gpt4 key购买 nike

我正在使用当前版本的neo4j,我正在尝试通过图 id 删除或更新节点,当我尝试删除作为参数传递(例如名称)时,它工作正常,但我需要删除带有 id 的一个节点,并更新节点。

String remove = "MATCH (n:Player {ID(n): {id} })-[r]-() DELETE n, r";
ExecutionResult result = engine.execute(remove,
params);

and

String query = "MERGE (n:Person {ID(n): {id}}) ON CREATE SET n.name={name}, n.surname={surname}, n.position={position} ON MATCH SET";

ExecutionResult result = engine.execute(query,
params);

我总是遇到类似的错误

输入“(”无效:需要标识符字符、空格、“:”或“}”(第 1 行,第 20 列)“在创建集上合并 (n:Person {ID(n): {id}}) n.name={name}, n.surname={surname}, n.position={position} ON MATCH SET”

输入“(”无效:需要标识符字符、空格、“:”或“}”(第 1 行,第 20 列)“匹配(n:玩家{ID(n):{id}})-[r]-()删除n,r”

平时我都是使用Spring data neo4j,没有发现此类错误。

有人有答案吗?

谢谢

最佳答案

ID 是一个返回节点或关系的内部 id 的函数,但在查询中您可以将它用作节点上的属性。通过内部id来匹配节点的方法是

MATCH (n)
WHERE ID (n) = {id}

在您删除的情况下,您可以这样做

MATCH (n:Player)-[r]-()
WHERE ID (n) = {id}
DELETE r, n

您无法将内部 id 分配给节点,Neo4j 在内部处理该问题,因此将 ID 函数与 MERGE 一起使用并没有任何意义。您可以选择您控制的不同唯一标识属性,并为其创建唯一约束,然后在您现在使用内部 id 的大多数(可能是所有)地方使用该属性。

关于java - neo4j cypher,尝试使用 ID(n) 更新和删除时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24831443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com