虽然标题很清楚,但
我需要删除特定关系类型的两个节点之间的关系。 Node的getSingleRelationship函数和getRelationships的重载版本都没有第二个节点参数。
我应该获得所有关系并迭代它以找到关系吗?有没有恒定的时间方式?
Core API或Traversal API中的推荐方法是什么?
答案 0 :(得分:2)
为什么不使用Cypher查询?图书馆有这种可能性。只需使用密码查询功能(请参阅他们的文档中的确切名称,我不记得了)然后使用此查询:
START n=node(_id1), m=node(_id2) MATCH n-[rel:RELATIONSHIP_TYPE]-m RETURN DISTINCT rel;
其中_id1和_id2是Neo4J中节点的内部ID
如果您使用Neo4J 2.0(强烈推荐),您的查询将类似于:
MATCH (n{id:"_id1"}), (m{id:"_id2"}), n-[rel:RELATIONSHIP_TYPE]-m RETURN DISTINCT rel;
在后一种情况下,您实际上可以在id的位置使用任何属性 - 例如,您自己的节点唯一ID或其名称等。
最后Neo4J明确表示他们正在从REST API转向Cypher,因此在可能的情况下使用Cypher是有意义的,而且你得到的更准确。
答案 1 :(得分:1)
是的,您将迭代关系并检查结束节点:
public Relationship getRelationshipBetween(Node start, Node end, Direction direction, RelationshipType type) {
for (Relationship r: start.getRelationships(direction,type)) {
if (r.getOtherNode(start).equals(end)) return r;
}
return null;
}