在两个节点之间获取特定类型的单一关系的推荐方法

时间:2014-02-16 20:56:43

标签: neo4j node-neo4j

虽然标题很清楚,但

我需要删除特定关系类型的两个节点之间的关系。 Node的getSingleRelationship函数和getRelationships的重载版本都没有第二个节点参数。

我应该获得所有关系并迭代它以找到关系吗?有没有恒定的时间方式?

Core API或Traversal API中的推荐方法是什么?

2 个答案:

答案 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;
}