Neo4j CSV 导入状态更新

标签 neo4j cypher

所以我正在尝试从Mysql数据库迁移到neo4j数据库。对于新的 neo4j 数据库,我计划了新闻源功能,如下所述 http://neo4j.com/docs/stable/cypher-cookbook-newsfeed.html这种机制显然与 mysql 不同,mysql 的新闻源只是一堆行。那么有没有办法以 -[status_update]->()-[next]->()- 格式快速将 mysql 行导入到 neo4j 中呢?目前我有 mysql 数据库,如下所示:

user table
+-------+--------------+
| id    | username     |
+-------+--------------+
| 1     | pewpewlasers |
+-------+--------------+

posts table
+-------+----------+------------+
| id    | user_id  | status     |
+-------+----------+------------+
| 1     | 1        | something  |
+-------+----------+------------+
| 2     | 1        | new update |
+-------+----------+------------+

最佳答案

如果将其输出为 CSV,则可以使用LOAD CSV,如下所示:

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///path/to/file/user.csv" AS line
CREATE (:User {id: toInt(line.id), username: line.username});

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///path/to/file/posts.csv" AS line
CREATE (:Post {id: toInt(line.id), line.status});

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///path/to/file/posts.csv" AS line
MATCH (user:User {id: toInt(line.user_id)})
MATCH (post:Post {id: toInt(line.id)})
CREATE user-[:status_update]->post;

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///path/to/file/posts.csv" AS line
MATCH
  (post:Post {id: toInt(line.id)})
  (previous_post:Post {id: toInt(line.id) - 1})
CREATE previous_post-[:next]->post;

您也许可以组合其中一些,但由于这里提到的 EAGER 问题,我总是小心地拆分查询:

http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/

关于Neo4j CSV 导入状态更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27763377/

相关文章:

docker - 如何在Cypher Neo4j中合并多个WITH和MATCH子句

neo4j - 获取没有特定关系的节点(cypher/neo4j)

powershell - 返回重载失败

neo4j - Cypher:模式的哪些部分可以绑定(bind)到变量?

neo4j "try"创建与节点的关系

java - 如何为图形数据库编码

neo4j - 按路径顺序返回节点的密码查询

java.lang.NoSuchFieldError : cypher_parser_version

java - Neo4j 嵌入式仅存储在一个运行时内

java - Spring Data Neo4j 不会插入新节点,只会更新具有相同属性的现有节点