如何在 neo4jclient 中使用 unwind 来更新数据?
how to use unwind in neo4jclient for updating data?
我想更新我在 neo4j 数据库中的一些记录。为了让我在 C# 中的 Neo4jClient 中编写此查询:
_client.Cypher
.Unwind(skills, "updatedSkill")
.Match("(s : Skill {Name: updatedSkill.Name}")
.Set("s = updatedSkill");
.ExecuteWithoutResults();
其中技能是技能对象的简单列表:
public class Skill
{
public string Name { get; set; }
public string Phrase { get; set; }
}
但是当我调用这段代码时抛出异常。其翻译的 Cypher 查询是:
UNWIND [{
"Name": "name1",
"Phrase": "phrase1",
},{
"Name": "name2",
"Phrase": "phrase2",
}] AS updatedSkill
MATCH (s : Skill {Name: updatedSkill.Name}
SET s = updatedSkill
异常情况如下:
Invalid input '"': expected whitespace, comment, an identifier,
UnsignedDecimalInteger, a property key name or '}' (line 3, column 5 (offset: 17))
" "Name": "name1","
^
当我删除属性 Name 和 Phrase 的双引号时,查询运行正常。但我可以做到,因为查询是由 Neo4jClient 自动生成的。
有什么想法吗?
您的 MATCH
语句中有错字。它缺少结尾 )
。如果您更正此问题,您的查询应该会按预期工作。另外,在您的 SET
语句末尾还有一个额外的分号,我已将其删除。
_client.Cypher
.Unwind(skills, "updatedSkill")
.Match("(s:Skill {Name: updatedSkill.Name})")
.Set("s = updatedSkill")
.ExecuteWithoutResults();
顺便说一句,这是一个示例,您正在查看的查询并不真正代表发送到 Neo4j REST 的参数化查询 API。我假设你是通过查看 _cypher.Query.DebugQueryText
获得的?在大多数情况下,这很好,但是在传递 JSON 对象的地方,由于它处理参数对象的字符串表示的方式,它可能会导致误导性查询。如果您查看 Neo4jClient 抛出的实际异常,它 应该 告知您问题的真正原因。在这种情况下
SyntaxException: Invalid input 'S': expected whitespace, comment, ')' or a relationship pattern...
"SET s = updatedSkill"
^
这告诉你真正的问题是你在开始 SET
语句之前没有关闭你的 MATCH
语句。
我想更新我在 neo4j 数据库中的一些记录。为了让我在 C# 中的 Neo4jClient 中编写此查询:
_client.Cypher
.Unwind(skills, "updatedSkill")
.Match("(s : Skill {Name: updatedSkill.Name}")
.Set("s = updatedSkill");
.ExecuteWithoutResults();
其中技能是技能对象的简单列表:
public class Skill
{
public string Name { get; set; }
public string Phrase { get; set; }
}
但是当我调用这段代码时抛出异常。其翻译的 Cypher 查询是:
UNWIND [{
"Name": "name1",
"Phrase": "phrase1",
},{
"Name": "name2",
"Phrase": "phrase2",
}] AS updatedSkill
MATCH (s : Skill {Name: updatedSkill.Name}
SET s = updatedSkill
异常情况如下:
Invalid input '"': expected whitespace, comment, an identifier,
UnsignedDecimalInteger, a property key name or '}' (line 3, column 5 (offset: 17))
" "Name": "name1","
^
当我删除属性 Name 和 Phrase 的双引号时,查询运行正常。但我可以做到,因为查询是由 Neo4jClient 自动生成的。
有什么想法吗?
您的 MATCH
语句中有错字。它缺少结尾 )
。如果您更正此问题,您的查询应该会按预期工作。另外,在您的 SET
语句末尾还有一个额外的分号,我已将其删除。
_client.Cypher
.Unwind(skills, "updatedSkill")
.Match("(s:Skill {Name: updatedSkill.Name})")
.Set("s = updatedSkill")
.ExecuteWithoutResults();
顺便说一句,这是一个示例,您正在查看的查询并不真正代表发送到 Neo4j REST 的参数化查询 API。我假设你是通过查看 _cypher.Query.DebugQueryText
获得的?在大多数情况下,这很好,但是在传递 JSON 对象的地方,由于它处理参数对象的字符串表示的方式,它可能会导致误导性查询。如果您查看 Neo4jClient 抛出的实际异常,它 应该 告知您问题的真正原因。在这种情况下
SyntaxException: Invalid input 'S': expected whitespace, comment, ')' or a relationship pattern... "SET s = updatedSkill"
^
这告诉你真正的问题是你在开始 SET
语句之前没有关闭你的 MATCH
语句。