我试图在测试环境中创建一个与其关系的节点。我在另一个数据库中获得了与其关系的节点。是否有可能获得在测试环境中插入节点的CREATE
语句?
答案 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
然后提取属性并输入插入查询。现在提取属性取决于语言。
这是我遵循的步骤:
query = "MATCH (n) return n"
result = session1.run(query)
loop the result object and convert it into dict and get the properties
then insert them into an insert query
insert_query = "MERGE/CREATE (n:{properties}) return n"
session2.run(insert_query)
该算法在python-neo4j中实现。
希望这有帮助!