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

是否可以在具有相同标签的节点之间创建双向关系?

冯福
2023-03-14

人员节点:

  • 名字
  • 姓氏
  • 地址
  • 电子邮件
  • 电话号码

公司节点:

  • 姓名
  • 地址
  • 电子邮件
  • 电话号码

关系:

  • 个人-[配偶]-

个人和实体:

public class Person {
    @Id
    @GeneratedValue
    Long personId;

    @Builder
    public Test(Long personId, String firstName, String lastName, String address, String email, String phoneNumber) {
        this.personId = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.addresss = address;
        this.email = email;
        this.phoneNumber = phoneNumber
    }

    @NotEmpty(message = "Please provide a first name")
    String firstName;

    @NotEmpty(message = "Please provide a last name")
    String lastName;

    String address;

    String email;

    String phoneNumber;

    @Relationship(type = "SPOUSE",direction=Relationship.OUTGOING)
    public Set<Person> spouse;

    @Relationship(type = "SIBLING",direction=Relationship.OUTGOING)
    public Set<Person> sibling;

    @Relationship(type = "FAMILY",direction=Relationship.OUTGOING)
    public Set<Person> family;
}

当我为简创建一个人时,我也添加了与约翰的兄弟姐妹关系。

运行个人。fetchById(“29d31f6c-edfe-48a2-9ab2-3baed5d5ae69”)检索节点Jane和对应的同级节点John。

{
   "address":"",
   "email":"",
   "phoneNumber":"",
   "personId":"29d31f6c-edfe-48a2-9ab2-3baed5d5ae69",
   "firstName":"Jane",
   "lastName":"Smith",
   "spouse":null,
   "sibling":[
      {
         "address":"",
         "email":"",
         "phoneNumber":"",
         "personId":"f825cedd-7328-4f9d-b0fd-a33726814f25",
         "firstName":"John",
         "lastName":"smith",
         "spouse":null,
         "sibling":[],
         "family":null
      }
   ],
   "family":null
}

但是,手足关系应该是双向的。运行person.fetchById("f825cedd-7328-4f9d-b0fd-a33726814f25")仅检索节点John。

{
   "address":"",
   "email":"",
   "phoneNumber":"",
   "personId":"f825cedd-7328-4f9d-b0fd-a33726814f25",
   "firstName":"John",
   "lastName":"Smith",
   "spouse":null,
   "sibling":null,
   "family":null,
   "closeFriend":null,
   "friend":null
}

这就是问题所在。我可以在约翰和简之间添加另一种兄弟姐妹关系。但是,这实际上在两者之间创建了一个无限循环。以及个人的输出。fetchById最终变成了垃圾。

  1. 有没有办法限制获取节点时返回的节点深度?
  2. 我是neo4j的新手,所以我怀疑我的设计是错误的。塑造这种关系的最佳方式是什么?

共有2个答案

姜正初
2023-03-14

据我所知(我也刚刚开始学习Neo4j),你不可能拥有双向的关系,人们总是建议你拥有双向的关系。

如果您决定在另一个方向添加另一个关系,可以将跳数限制为一个:

Cypher如何仅计算特定类型节点的最大跳数?

或者,如果希望看到更长的关系链,可以对结果设置一个条件,使其不返回结果中的原始节点?

陆野
2023-03-14

你在用SDN吗?

来自Spring Data Neo4j文档:

如果不关心方向,则可以指定方向=关系。无方向,这将保证两个节点实体之间的路径可以从任意一侧导航。

 类似资料:
  • 我需要在所有具有相同属性值的节点之间创建关系。 例如,我可以使用以下查询: 但是如果我有大约200K的节点,这个脚本运行的时间相当长。 有没有其他更快的方法来建立这样的关系? 谢谢

  • 我现在的解决办法是先保存所有的ArchitectureUnitState节点,从数据库中再次检索它们,将一个节点映射到另一个节点,然后再次保存它。这样,可以创建关系,但我需要保存两次。

  • 我正在创建一个简单的社交图,用户可以在其中创建一个帖子,标记它,并对它进行评论。我用py2neo做模型。该模型具有和作为节点。用户在上、或。在我的例子中,单个用户可以在单个上创建多个或(就像其他任何社交网络一样)。根据我的模型,这需要多个或关系,但具有不同的属性。模型是这样建立的: 我运行以下操作来构建图形: 我希望有两个关系,如下所示: 但我看到事实并非如此: 那么,我的问题是双重的。(1)可以

  • 我有以下图表: 我正在寻找一种方法来计算从a发送到b和从b发送到c/d的金额之间的差异,这取决于referenceId,但不使用特定的referenceId。 所以我在寻找像下面这样的半代码: 有人知道我该怎么做吗?

  • 花了好几天的时间试图弄明白为什么这不起作用。我的模型是

  • 从Neo4j 1.9开始。2,并使用Cypher查询语言,我希望在具有特定公共属性值的节点之间创建关系。我有一组具有属性H的节点G,在G节点之间当前不存在任何关系。 在Cypher语句中,是否可以按H属性值对G节点进行分组,并在成为同一组的每个节点之间创建关系HR?知道每个小组的人数在2人之间 我一直在努力管理这样的查询,但没有找到正确的语法。下面是一个小样本数据集: 最后,我希望有这样的关系: