【问题标题】:NEO4J merge list of objects and relate to other nodeNEO4J 合并对象列表并与其他节点相关
【发布时间】:2016-11-30 16:47:59
【问题描述】:

我有一个电话号码列表,我想将所有列表合并到我的 NEO4J 中,如果不存在则创建唯一关系

List<ContactPhoneNumber> phones = new List<ContactPhoneNumber>();

WebApiConfig.GraphClient.Cypher
               .Unwind(phones, "node")
               .CreateUnique("(isuser:BaseUser{guid: '" + userid + "'})-[:PHONES_FROM_DEVICE]->(isphone:ContactPhoneNumber)")
               .Set("isphone = node")
               .ExecuteWithoutResults();

我得到的错误是

PatternException: 未绑定模式!

以及来自 NEO4J 的堆栈跟踪

在 Neo4jClient.GraphClient.Neo4jClient.IRawGraphClient.ExecuteCypher(CypherQuery 查询)在 D:\temp\c4dadf9\Neo4jClient\GraphClient.cs:line 1075 \n 在 Neo4jClient.Cypher.CypherFluentQuery.ExecuteWithoutResults() 中 D:\temp\c4dadf9\Neo4jClient\Cypher\CypherFluentQuery.cs:429 行

我该如何解决这个问题?

【问题讨论】:

    标签: c# neo4j cypher neo4jclient


    【解决方案1】:

    CREATE UNIQUE 要求模式中的至少一个节点“绑定”到现有节点。

    这句话可能对你有用:

    WebApiConfig.GraphClient.Cypher
        .Unwind(phones, "node")
        .Merge("(isuser:BaseUser{ guid: {userid} })")
        .CreateUnique("(isuser)-[:PHONES_FROM_DEVICE]->(isphone:ContactPhoneNumber {isPhone: node})")
        .WithParam("userid", userid)
        .ExecuteWithoutResults();
    

    它:

    • 使用MERGE 获取(如果不存在则创建)所需的BaseUser 节点isuser
    • 使用“绑定”到isuserCREATE UNIQUE 模式。
    • 消除SET 子句,并在CREATE UNIQUE 子句中分配isPhone 属性,因为这样可以适当地防止重复。
    • userid 值作为参数传递(这样更安全、更高效)。

    【讨论】:

    • 你的代码帮了我很大的忙我想我解决了我的问题我使用这个代码 WebApiConfig.GraphClient.Cypher .Unwind(phones, "node") .Merge("(isuser:BaseUser{ guid: ' "+userid+"'})") .Merge("(isphone:ContactPhoneNumber{phone: node.phone } )") .CreateUnique("(isuser)-[:PHONES_FROM_DEVICE]->(isphone)") .ExecuteWithoutResults() ;我将合并添加到 contactphonenumber 节点,可能是因为电话有限制!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多