Neo4j能否基于marriage对象的spouse关联计算派生marriedTo关系
Neo4j 派生
marriedTo关系的实现方案 完全可以实现该需求,根据你的使用场景可以选择两种不同的处理方式:
方案1:持久化存储marriedTo关系
如果marriedTo关系需要高频查询,建议直接在库中创建实体关系永久存储,执行对应Cypher即可批量生成:
// 匹配所有marriage节点关联的配偶对,用MERGE避免重复创建关系 MATCH (p1:Person)-[:spouse1]->(m:marriage)<-[:spouse2]-(p2:Person) // 不需要双向关系的话可以删除第二行MERGE语句 MERGE (p1)-[:marriedTo {marriageId: id(m), marryDate: m.marryDate}]->(p2) MERGE (p2)-[:marriedTo {marriageId: id(m), marryDate: m.marryDate}]->(p1)
上述语句还支持将marriage节点的属性同步到marriedTo关系上,比如结婚日期、登记地等,按需添加到关系属性中即可。
方案2:查询时动态派生虚拟关系
如果不想额外占用存储,仅在部分查询场景需要返回marriedTo关联,可以在查询时动态生成虚拟关系,无需实际写入数据库:
// 查询时动态生成虚拟的marriedTo关系返回,不会修改库中实际存储 MATCH (p1:Person)-[:spouse1]->(m:marriage)<-[:spouse2]-(p2:Person) WHERE m.isValid = true // 可加过滤条件,只返回有效婚姻 RETURN p1, p2, apoc.create.vRelationship(p1, 'marriedTo', properties(m), p2) AS marriedToRelation
如果没有安装APOC插件,也可以直接在业务逻辑层基于匹配到的p1、p2对直接判定为存在marriedTo关联,不需要依赖数据库层面的关系存储。
内容的提问来源于stack exchange,提问作者user3065671
相关产品推荐
相关产品推荐

