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节点。如何组织密码查询以防止此错误?谢了。
您有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}})
当match
ing或merge
ing时,如果在:
之前提供一个名称(如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的节点,这个脚本运行的时间相当长。 有没有其他更快的方法来建立这样的关系? 谢谢
请有人给我指个正确的方向。