如何获取neo4j节点的create命令?

时间:2018-01-04 12:46:57

标签: neo4j cypher

我试图在测试环境中创建一个与其关系的节点。我在另一个数据库中获得了与其关系的节点。是否有可能获得在测试环境中插入节点的CREATE语句?

2 个答案:

答案 0 :(得分:1)

我相信可以在普通Cypher中做到这一点,但这很棘手。我之前以import-cypher -o [filename] [query]的形式使用Cypher generate command snippets来导出数据。这可以根据您的使用情况进行调整,但必须做出一些设计决策:

  • 我们如何识别节点?
  • 关系是否具有属性?

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

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 - 明天我会根据我得到的反馈来改进这个答案。

答案 1 :(得分:0)

然后您可以使用单独的会话或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)
  7. 该算法在python-neo4j中实现。

    希望这有帮助!