当前位置: 首页 > 知识库问答 >
问题:

Neo4J中的无向关系

白学
2023-03-14

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

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

    @GraphId
    private Long id;
    private String name;

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

如上所述,一个人有一个类型为“人”的朋友列表。该关系保持无方向,以确保如果一个人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的朋友,所以理想情况下,这应该意味着

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浏览器中的图形还显示了从角色到角色B的定向边。

我想要的是,如果人物A是人物B的朋友,我会得到结果,不管我用哪种方式问。代码似乎适用于

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

哪里"-

我该怎么办?

我使用的是spring-data-neo4j。版本4.0。0.0版本和spring boot版本spring boot starter父级1.3。0.M5

共有1个答案

越新霁
2023-03-14

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

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

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

你为什么不想用这个?

 类似资料:
  • 我试图在Neo4j中插入两个节点之间的关系。我正在使用Neo4J(2.1.8社区) 我正在使用尝试创建员工经理关系。此关系实体是报表。(两个类都在下面给出) 但当我试图挽救这段感情的时候 我得到了例外作为 线程“main”组织中出现异常。springframework。刀。DataRetrievalFailureException:关系[0]没有propertyKey=“type”的属性。;嵌套的

  • 下面是我的密码 请告诉我,我应该如何从csv文件指定关系。

  • 我有一个CSV数据集,我试图通过它在数据库中已经存在的两个节点类型(和)之间建立关系。 这是数据库信息- 问题是--无论我尝试哪个密码查询,它们都返回相同的东西--“无更改,无行”。 此查询只返回“no rows”。 我还尝试了该查询的一个变体,其中我没有使用函数,但这并没有什么不同。 为了确保节点存在,我从CSV文件中选择了随机单元格值,并使用子句来确保数据库中存在相应的和节点,并且找到了所有节

  • 我是一个新的4J新手,我有一个简单的CSV与来源和dest IPS。我想在具有相同标签的节点之间创建一个关系。 类似于…source_ip>>ALERTS>>dest_ip,或者相反。 ....

  • 目前,我正在开发一个利用Neo4J的webapp。我们的应用程序需要部署在Tomcat环境中(客户需求)。我们决定嵌入Neo4j,因为这样我们可以使用Neo4j提供的Java API,部署起来更容易,性能也更好。但是,我们还需要访问REST API,因为我们有一个用Angular编写的单页webapp,目前正在使用这个接口。但是,嵌入式Neo4j数据库并不公开REST API。Neo4j-serv

  • 图像我有以下实体:公司和员工,带有Spring数据neo4j注释: Company.java 受雇者JAVA 然后是这些实体的关系实体: 那么如何保留和中的引用呢? Company.java 或 人JAVA 或