我正在尝试在测试环境中创建一个节点及其关系。我在另一个数据库中获得了节点及其关系。是否有可能以某种方式获得在测试环境中插入节点的 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
提取属性并放入插入查询中。现在提取属性取决于语言。
这些是我遵循的步骤:
-
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中实现的。
希望这有帮助!