虽然标题很清楚,
我需要删除特定关系类型的两个节点之间的关系。Node 的 getSingleRelationship 函数和 getRelationships 的重载版本都没有第二个节点参数。
我应该获取所有关系并对其进行迭代以找到关系吗?有没有固定时间的方法?
Core API 或 Traversal API 中推荐的方式是什么?
虽然标题很清楚,
我需要删除特定关系类型的两个节点之间的关系。Node 的 getSingleRelationship 函数和 getRelationships 的重载版本都没有第二个节点参数。
我应该获取所有关系并对其进行迭代以找到关系吗?有没有固定时间的方法?
Core API 或 Traversal API 中推荐的方式是什么?
为什么不使用 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 是有意义的,而且你得到的结果也更准确。
是的,您将遍历关系并检查端节点:
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;
}