当前位置: 首页 > 知识库问答 >
问题:

创建与现有节点的关系

巫马正卿
2023-03-14
delivery = "Delivery.csv"
graph = Graph("http://localhost:7474/db/data/")
graph.cypher.execute("CREATE CONSTRAINT ON (delivery:Delivery) ASSERT delivery.name IS UNIQUE")
with open(delivery, 'r+') as in_file:

    reader = csv.reader(in_file, delimiter=';')
    next(reader, None)
    batch = graph.cypher.begin()

    try:
        i = 0;
        j = 0;
        for row in reader:
            if row:
                name = strip(row[0])
                created_by = strip(row[1])
                created_on = strip(row[2])
                description = strip(row[3])
                delivered_to = strip(row[4])
                delivered_by = strip(row[5])
                barcode = strip(row[6])

                query = """
                    merge (delivery:Delivery {name:{a}})
                    merge (email:Email {email:{b}})
                    merge (created_on:Created_On {created_on:{c}})
                    merge (description:Description {describe:{d}})
                    merge (email:Email {email:{e}})
                    merge (email:Email {email:{f}})
                    merge (barcode:Barcode {code:{g}})
                  ##and there are some relationships##
                   """
                   batch.append(query, {"a": delivery, "b": created_by, "c": created_on "d": description, "e": delivered_to,
                                     "f": delivered_by, "g": barcode})
                  .........................................................
                  .........code goes as described in the hypherlink........

“email”节点以前是从另一个“people.csv”文件创建的,并且“email”节点存在唯一性约束。在上面的行中,我希望通过关系将“created_by”、“delivered_to”和“delivered_by”节点与之前创建的“email”节点合并。当我运行代码时,它给出了错误email已经声明,并且没有从CSV中创建any节点。如何组织密码查询以防止此错误?谢了。

共有1个答案

裴兴学
2023-03-14

您有3个节点试图在查询中调用email。您需要重命名其中的两个,以便没有任何重复。

query = """
     merge (delivery:Delivery {name:{a}})
     merge (email:Email {email:{b}})
     merge (created_on:Created_On {created_on:{c}})
     merge (description:Description {describe:{d}})
     merge (email:Email {email:{e}})                # <- pick a different name
     merge (email:Email {email:{f}})                # <- pick a different name
     merge (barcode:Barcode {code:{g}})

matching或mergeing时,如果在:之前提供一个名称(如email和上面示例中的其他名称),则将匹配或合并的节点绑定到该名称。不能为多个节点提供相同的名称。

如果以后不打算在查询中使用这些名称,我建议不要命名它们。例如:

merge (:Email {email:{b}})
 类似资料:
  • 我需要创建一个新的A类节点,它与User节点有关系: 现在,假设我们有新节点A的以下数据: 我试图创建节点A,使新节点A与具有“id”:4和“nodeId”:“0002-0002”(唯一节点标识符)的用户的(现有)节点之间具有关系,但用户节点将字段“name”和“firstName”更新为。 我正在使用GraphRespository代理创建它: 有没有办法不进行此更新,只与用户节点建立关系?

  • 我当前有一个查询,用于在Men节点和People节点之间建立关系: Mem节点包含一个personid数组,我正在展开该数组,然后将其与personid节点对应。但是,查询正在与它创建的新Person节点建立关系,只使用相应的PersonId属性(而不使用其他属性),而不是与具有相应PersonId的现有Person节点建立关系。 即使我对带有Person标签的节点的personID属性有一个唯一

  • 我试图在Neo4j中创建节点之间的关系。我正在使用Neo4J(2.1.8社区) 我试图创建以下关系。 创建一个新的员工(节点),它将向DB中的Manager(节点)报告(空关系)(按名称搜索)。我使用了下面的查询。 我得到了下面的错误。 谁能告诉我这个问题出了什么问题?另外,如果这不是使用GraphRespository创建关系的正确方法,那么我还可以使用什么来实现同样的目的呢。 提前感谢。 注意

  • 使用cypher和neo4j 2.0。 给定两组节点ID(长度相等)和一组权重,我想在相应的节点之间创建一个关系,并将权重设置为属性。例如,如果我有以下三个列表: 我想创建以下表示形式 但不是,例如 我可以通过迭代我的参数,然后创建单独的查询来实现这一点。有没有一种方法来批量运行它,将我的lsits作为参数传递,并要求按顺序匹配节点和属性? 我曾一度认为以以下方式使用参数会起作用,但它会创建关系的

  • 我需要在所有具有相同属性值的节点之间创建关系。 例如,我可以使用以下查询: 但是如果我有大约200K的节点,这个脚本运行的时间相当长。 有没有其他更快的方法来建立这样的关系? 谢谢

  • 请有人给我指个正确的方向。