foreach - 在 neo4j 的 FOREACH 中创建唯一的关系属性

标签 foreach neo4j py2neo

我试图在 python 中完成一些非常简单的事情,但在 Neo4j 中却不是这样。 我非常感谢任何改进程序的意见和建议!

在Python脚本中,我试图为每对两个节点创建一个关系及其属性。通过数据分析(不是 csv 文件),我最终得到了一个包含三列的数据框,如下所示:

name1    name2    points
===========================
Jack     Sara     0.3
Jack     Sam      0.4
Jack     Jill     0.2
Mike     Jack     0.4
Mike     Sara     0.5    
...

从现在起,我想为人物创建所有节点:Jack、Sara、Sam、Mike 等,以及他们与属性名称点的关系。

首先,我尝试匹配所有节点,然后使用“FOREACH”一次更新一个关系属性。

tx = graph.cypher.begin()
qs2 = "MATCH (p1:person {name:"Jack"}), (p2:person) 
       WHERE p2.name IN ["Sara","Jill","Mike"] 
       FOREACH (r IN range(10) | 
         CREATE (p1)-[:OWES TO {score:{score_list}[r]}]->(p2))"

以上语句没有返回我所期望的结果。它不是将一个节点与另一个节点进行匹配,而是调用 p2 中的所有节点并创建 paris 之间的关系,从而产生相同信息的多个副本。

是否有一种符号可以一次指示一个节点?如果您认为有比上述更好的方法,请与我分享。谢谢!

最佳答案

最简单的方法是将要导入的数据导出到 csv 文件中,然后使用 LOAD CSV密码命令。

LOAD CSV WITH HEADERS FROM <url> AS csvLine
MATCH (p1:Person {name:csvLine.name1}), (p2:Person {name:csvLine.name2})
CREATE (p1)-[:OWES_TO {score:csvLine.points}]->(p2)

如果您无法使用该方法,您可以使用 transactional http endpoint 来使用参数化 Cypher 语句。 。该参数是包含数据结构数组的单个元素映射。在 http 级别上,请求正文将如下所示:

{
   "statements": [
       {
           "parameters": {
               "data": [
                   {
                       "name1": "Jack", "name2": "Sara", "points": 0.3 
                   }, 
                   {
                       "name1": "Jack", "name2": "Sam", "points": 0.4
                   }, 
                   {
                       "name1": "Jack", "name2": "Jill", "points": 0.2
                   }  // ...
               ]
           }, 
           "statement": "UNWIND {data} AS row     
                         MATCH (p1:Person {name:row.name1}), (p2:Person {name:row.name2})
                         CREATE (p1)-[:OWES_TO {row.points}]->(p2)"
       }
   ]
}

有关以下评论的更新

问:如何从 pyhton 创建参数? A:使用python json模块

import json
json.dumps({'data':[{'name1':'Jack', 'name2':'Sara', 'points':0.3},{'name1':'Jack', 'name2':'Sam', 'points':0.4}]})

关于foreach - 在 neo4j 的 FOREACH 中创建唯一的关系属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27150249/

相关文章:

java - Neo4j : Traverser only get first and last node

python - 从 MySQL 插入 Neo4j 的大数据集

javascript - 如何使用 JavaScript 将使用 forEach 解析的数组项插入到字符串中?

javascript - AngularJS $scope in 循环/forEach

neo4j - 当仅预期列更改时从 Cypher 返回不同的行

docker - 在 docker 容器中加载 neo4j 转储时出现问题

python - Py2neo Neo4j批量提交报错

colors - neo4j-本地主机 :7474 browser - which nodes are coloured? (py2neo)

php - 在 PHP foreach 循环之外访问变量

php - 我可以在这里使用 foreach 进行多次上传吗?