这是一个找到模式、创建虚拟节点,然后创建与真实节点的关系的密码。
MATCH (account:Account:Iam)-[:DATE]->(date:Date)-[:ACTED]-(start_log:Log)-[:ACTED*1..]->(end_log:Log)-[:DETECTED]->(rule:Rule)
WHERE account.name = 'ar_hk'
WITH account, date, start_log, end_log, rule
MATCH path=(start_log)-[:ACTED*]->(end_log)
WITH account, date, start_log, end_log, rule, path
WITH account, date, start_log, end_log, rule, path,
nodes(path) AS all_nodes
WITH account, date, start_log, end_log, rule, path, all_nodes,
all_nodes[0] AS virtual_start,
all_nodes[-1] AS virtual_end
WITH account, date, start_log, end_log, rule, virtual_start, virtual_end, length(path) AS path_length
CALL apoc.create.vNode(['Analysis'], {path_length: path_length}) YIELD node AS virtual_analysis
CREATE (virtual_start)-[:VIRTUAL_START]->(virtual_analysis)
CREATE (virtual_analysis)-[:VIRTUAL_END]->(virtual_end)
RETURN account, date, start_log, end_log, rule, virtual_analysis
出现错误“无法加载 NODE 4:db8c4fa9-255d-4df3-a0e1-0818e92d3b53:-2369”。
这是我的第二个密码:
MATCH (account:Account:Iam)-[:DATE]->(date:Date)-[:ACTED]-(start_log:Log)-[:ACTED*1..]->(end_log:Log)-[:DETECTED]->(rule:Rule)
WHERE account.name = 'ar_hk'
WITH account, date, start_log, end_log, rule
MATCH path=(start_log)-[:ACTED*]->(end_log)
WITH account, date, start_log, end_log, rule, path
WITH account, date, start_log, end_log, rule, path,
nodes(path) AS all_nodes
WITH account, date, start_log, end_log, rule, path, all_nodes,
all_nodes[0] AS virtual_start,
all_nodes[-1] AS virtual_end
CALL apoc.create.vNode(['Analysis'], {path_length: length(path)}) YIELD node as virtual_analysis
WITH account, date, start_log, end_log, rule, virtual_start, virtual_analysis, virtual_end
CREATE (virtual_start)-[:START]->(virtual_analysis)-[:END]->(virtual_end)
RETURN account, date, start_log, end_log, rule, virtual_analysis
但是,错误“无法加载 NODE 4:db8c4fa9-255d-4df3-a0e1-0818e92d3b53:-2369”仍然出现。
我做错了什么?
之前已经创建过类似的问题,但我认为没有任何关于虚拟节点和虚拟关系的问题。
您无法使用真实关系将真实节点与虚拟节点连接起来(请参阅文档中的第 3 段)。
但是你可以将它与虚拟关系联系起来:
CALL apoc.create.vRelationship(virtual_start, 'VIRTUAL_START', {}, virtual_analysis)
CALL apoc.create.vRelationship(virtual_analysis, 'VIRTUAL_END', {}, virtual_end)
有关更多信息,请查看 apoc.create.vRelationship 上的文档。