如何获取 neo4j 节点的创建命令



我正在尝试在测试环境中创建一个节点及其关系。我在另一个数据库中获得了节点及其关系。是否有可能以某种方式获得在测试环境中插入节点的 CREATE 语句?

我相信可以用

普通的密码做到这一点,但这非常棘手。我以前使用Cypher以import-cypher -o [filename] [query]的形式生成命令片段以导出数据。这可以适应您的用例,但必须做出一些设计决策:

  • 我们如何识别节点?
  • 关系有属性吗?

首先,让我们创建一个示例节点:

CREATE (:Label1:Label2 {prop1: 'string', prop2: 123, prop3: true})

若要从数据库生成此函数,请使用以下命令:

MATCH (n)
WITH
  reduce(
    acc = '', label IN labels(n) |
    acc + ':`' + label + '`')
    AS labels,
  reduce(
    acc = '', key IN keys(n) |
    acc + '`' + key + '`: ' +
      CASE n[key] = true              WHEN true THEN 'true'  ELSE
      CASE n[key] = false             WHEN true THEN 'false' ELSE
      CASE toInteger(n[key]) = n[key] WHEN true THEN n[key]  ELSE
      CASE toFloat(n[key]) = n[key]   WHEN true THEN n[key]  ELSE
      "'" + n[key] + "'" END END END END
    + ', ') AS properties
WITH
  labels,
  substring(properties, 0, length(properties) - 2) AS properties
RETURN
  'CREATE (' + labels + ' {' + properties + '})'

此查询生成的CREATE命令与我们开始使用的命令基本相同:

CREATE (:`Label1`:`Label2` {`prop1`: 'string', `prop2`: 123, `prop3`: true})

要连接相邻节点,我们需要一些 ID - 我明天将根据我得到的反馈改进这个答案。

然后,您可以使用单独的会话或neo4j并尝试该过程。 然后Match (n:Label) return n提取属性并放入插入查询中。现在提取属性取决于语言。

这些是我遵循的步骤:

  1. query = "MATCH (n) return n"
  2. result = session1.run(query)
  3. loop the result object and convert it into dict and get the properties
  4. then insert them into an insert query
  5. insert_query = "MERGE/CREATE (n:{properties}) return n"
  6. session2.run(insert_query)

该算法是在python-neo4j中实现的。

希望这有帮助!

最新更新