Neo4j跨独立数据库创建节点关系是否仅依赖Fabric等企业特性?
跨Neo4j独立数据库创建关系的解决方案
跨独立数据库直接创建节点间关系的操作,确实只有Neo4j企业版的Fabric特性支持。社区版没有原生的跨库关联能力——因为每个独立数据库都是完全隔离的存储单元,不同库的节点属于不同的存储上下文,没法直接建立关系。
社区版可用的替代方案
如果用不了企业版Fabric,有两种办法可以实现类似需求:
1. 合并数据库到同一DBMS
把其中一个库的数据迁移到另一个库,统一到同一个DBMS下操作:
- 导出其中一个库(比如Suppliers)的节点数据
- 将导出的数据导入到另一个库(比如Factories)中
- 之后在同一个数据库里执行你的MATCH+CREATE语句,就能正常创建关系了
导出导入可以用Neo4j自带的neo4j-admin dump和neo4j-admin load命令,或者直接用Neo4j Desktop的可视化导出/导入功能。
2. 应用层维护逻辑关联
不在数据库层面创建物理关系,而是在应用代码里维护两个库节点的关联:
- 在应用中分别查询两个库的目标节点,记录它们的唯一标识(比如name或者节点ID)
- 后续需要关联查询时,通过应用层把两个库的数据拼接起来,模拟关系的效果
顺便修正你的Cypher语句
你提供的节点创建和关系创建语句有几处语法错误,修正后如下:
创建Suppliers库节点:
CREATE(n:Bolts {name: 'Holding Corp.', type: 'public'}) CREATE(n:Pistons {name: 'Flemings Company.', type: 'private'})
创建Factories库节点:
CREATE(n:Boilers {name: 'xyz'}) CREATE(n:CoolingSystems {name: 'abc'}) CREATE(n:Piping {name: 'efg'})
修正后的关系创建语句(匹配实际节点标签,修正RETURN里的错误变量):
MATCH (supplier:Bolts), (factory:CoolingSystems) WHERE supplier.name = 'Holding Corp.' AND factory.name = "abc" CREATE (supplier)-[fixationUnits:SUPPLIES_FIXATION {name: 'SUPPLIES_FIXATION', description: 'sample.'}]->(factory) RETURN type(fixationUnits), supplier.name, factory.name
内容的提问来源于stack exchange,提问作者Kaliyug Antagonist
相关产品推荐
相关产品推荐

