Spring 数据查询转neo4j查询

Spring data query to neo4j query

我是 Neo4j 初学者,我想将 Spring 数据查询转换为 Neo4j 查询。

我有三张表。

@RelationshipEntity(type = "IS_ATTENDING_EVENT")
public class IsAttendingEventDO {

    @GraphId
    private Long id;
    @Property
    private String isAttendingEventId;
    @StartNode
    private PersonDO personDO = new PersonDO();
    @EndNode
    private EventDO eventDO = new EventDO();


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

    @GraphId Long id;
    @Property
    private String personId;
    @Property
    private String name; 


@NodeEntity(label="Event")
public class EventDO {

    @GraphId
    private Long id;
    @Property
    private String eventId;

这是我的spring-数据查询。

IsAttendingEventDO getByEventEventIdAndPersonPersonId(String eventId, String personId); 

请帮助我将此查询转换为 Neo4j 查询。

此致, 帕斯·索兰基。

我认为您应该通读 Neo4j developers manual 并了解 Cypher 语法和用法。

在对 Cypher 有基本了解的情况下,这是一个非常简单的查询。只匹配你感兴趣的模式(参加活动的人,使用已经定义的标签),提供关于人、事件和关系的变量,添加一个WHERE子句来限制匹配中的人和事件对于给定的 id 参数,然后 return 符合这些谓词适用的匹配模式的关系:

MATCH (p:Person)-[rel:IS_ATTENDING_EVENT]->(e:Event)
WHERE p.id = {personId} AND e.id = {eventId}
RETURN rel

编辑:

回答您关于 return 关系列表(参加 :Event 的 :Person)的评论,其中唯一给定的参数是 eventId。

要从节点形成列表,您可以使用 COLLECT() 函数。

因此,如果您尝试仅基于 eventId 获取关系,则无需在 :Person 节点上提供变量,因为您没有任何谓词可应用于它,并且您没有使用它或 returning 它。您感兴趣的只是参加活动的人与给定 eventId 的关系,以及 returning 这些 returned 关系的集合。

MATCH (:Person)-[rel:IS_ATTENDING_EVENT]->(e:Event)
WHERE e.id = {eventId}
RETURN COLLECT(rel)

再次,请通读开发人员手册,并使用 Cypher refcard 来帮助您。当您通读基本文档后,您提出的问题很容易解决。