如何在neo4jclient中使用展开来更新数据

本文关键字:更新 数据 neo4jclient | 更新日期: 2023-09-27 18:26:44

我想更新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","
         ^

删除"名称"answers"短语"属性的双引号后,查询将正确运行。但我可以这样做,因为查询是由Neo4jClient自动生成的。

有什么想法吗?

如何在neo4jclient中使用展开来更新数据

您的MATCH语句中有一个拼写错误。它缺少关闭的)。如果您更正了这一点,您的查询应该可以按预期工作。顺便说一句,在SET语句的末尾还有一个额外的分号,我已经删除了它。

_client.Cypher
        .Unwind(skills, "updatedSkill")
        .Match("(s:Skill {Name: updatedSkill.Name})")
        .Set("s = updatedSkill")
        .ExecuteWithoutResults();

顺便说一句,这是一个示例,您正在查看的查询并不能真正代表发送到Neo4jRESTneneneba API的参数化查询。我想你是通过看_cypher.Query.DebugQueryText得到的?对于大多数情况,这很好,但在传递JSON对象的情况下,由于它处理参数对象的字符串表示的方式,可能会导致误导性查询。如果您查看Neo4jClient抛出的实际异常,应该通知您问题的真正原因。在这种情况下,

SyntaxException:输入"S"无效:应为空白、注释、")"或关系模式。。。"SET s=updatedSkill"
 ^

这告诉您真正的问题是您在开始SET语句之前没有关闭MATCH语句。