gpt4 book ai didi

neo4j - Neo4J 中的无向关系

转载 作者:行者123 更新时间:2023-12-02 05:28:15 33 4
gpt4 key购买 nike

我正在使用 Spring Data Neo4J 来定义不同人之间的无向关系。下面提供了一个示例实体类。

@NodeEntity(label="Person")
public class Person {

@GraphId
private Long id;
private String name;

@Relationship(type = "FRIEND_WITH", direction=Relationship.UNDIRECTED)
List<Person> friends;
}

如上所述,一个人有一个“人”类型的 friend 列表。这种关系保持无向,以确保如果一个人 A 是“Friend_With”人 B,那么人 B 也是“Friend_With”人 A。

添加好友的代码如下
    if((person.getFriends() == null)||(person.getFriends().size()==0)){
List<Person> friendList = new ArrayList<Person>();
friendList.add(friend);
person.setFriends(friendList);
}else{
person.getFriends().add(friend);
}

personRepository.save(person);

我已将 PersonB 添加为 PersonA 的 friend ,因此理想情况下,这应该意味着
PersonA - [:FRIEND_WITH] -> PersonB
PersonB - [:FRIEND_WITH] -> PersonA

因为这种关系是无方向的

但是当我查询时,在 Neo4J 中
MATCH (p:Person)-[r:FRIEND_WITH]->(b:Person) where p.name = "PersonA" return p,b

我得到的结果是 PersonA,PersonB。但是当我查询时
MATCH (p:Person)-[r:FRIEND_WITH]->(b:Person) where p.name = "PersonB" 

不返回任何行。因此实体类中指定的方向似乎不起作用。 Neo4J 浏览器中的 Graph 也显示了从 PersonA 到 PersonB 的有向边。

我想要的是,如果 PersonA 是 PersonB 的 friend ,无论我问哪种方式,我都会得到结果。该代码似乎适用于
MATCH (p:Person)-[r:FRIEND_WITH]-(b:Person) where p.name = "PersonB" 

其中“->”被“-”替换,但我不想使用它。

我该怎么办 ?

我正在使用 spring-data-neo4j.version 4.0.0.RELEASE 和 spring-boot 版本 spring-boot-starter-parent 1.3.0.M5

最佳答案

在 Neo4j 中,所有关系都是定向的。

但是,您可以在查询时拥有无向边的概念。只需从 MATCH 查询中删除方向:

MATCH (p:Person)-[r:FRIEND_WITH]-(b:Person) where p.name = "PersonB" 

你为什么不想使用这个?

关于neo4j - Neo4J 中的无向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33368073/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com