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 来帮助您。当您通读基本文档后,您提出的问题很容易解决。
我是 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 来帮助您。当您通读基本文档后,您提出的问题很容易解决。