0

我正在尝试在 neo4j 数据库中的节点之间批量创建关系。我正在尝试使用此代码,但它不起作用!

relations = [{'from': 'man', 'to': 'woman', 'properties': {'cost': 0}},
{'from': 'woman', 'to': 'baby', 'properties': {'cost': 0}]

query = """
    UNWIND {{relations}} as row
    MATCH (from:SINGLE_NODE {{row.from}})
    MATCH (to:SINGLE_NODE {{row.to}})
    CREATE/MERGE (from)-[rel:IS_CONNECTED]->(to)
    (ON CREATE) SET rel += row.properties
    """.format(relations=relations)

session.run(query, relations=relations)

那么无论如何我可以通过使用批处理来添加关系吗?

4

2 回答 2

0

您的查询存在多个语法问题。

在下一行中,没有提及您尝试与参数 row.from 和 row.to 匹配的节点属性。

MATCH (from:SINGLE_NODE {{row.from}})
MATCH (to:SINGLE_NODE {{row.to}})

从它们的值来看,我猜这些应该是性别属性,查询应该类似于:

MATCH (from:SINGLE_NODE {{gender:row.from}})
MATCH (to:SINGLE_NODE {{gender:row.to}})

在以下语句中,它应该是 CREATE 或 MERGE,并且在第二行,ON CREATE 周围没有大括号。仅当您在第一行使用 MERGE 时才使用 ON CREATE,否则只需使用 SET。

CREATE/MERGE (from)-[rel:IS_CONNECTED]->(to)
(ON CREATE) SET rel += row.properties

所以它应该是其中之一:

CREATE (from)-[rel:IS_CONNECTED]->(to)
SET rel += row.properties

或者

MERGE (from)-[rel:IS_CONNECTED]->(to)
ON CREATE SET rel += row.properties
于 2019-08-08T08:36:01.420 回答
0

我现在找到了答案,所以正确的语法是这样的。

 query = """
    UNWIND {{relations}} as row
    MATCH (from:SINGLE_NODE {{name:row.from}})
    MATCH (to:SINGLE_NODE {{name:row.to}})
    MERGE (from)-[rel:IS_CONNECTED]->(to)
    ON CREATE SET rel += row.properties
    """.format(relations=relations)

    session.run(query, relations=relations)

于 2019-08-08T10:56:41.160 回答