我是Neo4j的初学者,我想将Spring数据查询转换为Neo4j Query。
我有三张桌子。
@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-data查询。
IsAttendingEventDO getByEventEventIdAndPersonPersonId(String eventId, String personId);
请帮我将此查询转换为Neo4j查询。
此致 Parth Solanki。
答案 0 :(得分:1)
我认为您应该通读Neo4j developers manual并了解Cypher的语法和用法。
基于对Cypher的基本了解,这是一个非常简单的查询。只需匹配您感兴趣的模式(参加活动的人,使用已定义的标签),在人员,事件和关系上提供变量,添加WHERE子句以限制匹配中的人和事件到给定的id参数,然后返回适合这些谓词适用的匹配模式的关系:
~/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/etc/docker/daemon.json
编辑:
回答你关于返回关系列表的评论(a:参加:事件的人),其中唯一给定的参数是eventId。
要从节点形成列表,可以使用COLLECT()函数。
因此,如果您尝试仅基于eventId获取关系,则不需要在:Person节点上提供变量,因为您没有任何谓词可应用于它,并且您不是不使用它或返回它。您感兴趣的只是参加活动的人与给定eventId的关系,并返回这些返回关系的集合。
MATCH (p:Person)-[rel:IS_ATTENDING_EVENT]->(e:Event)
WHERE p.id = {personId} AND e.id = {eventId}
RETURN rel
同样,请仔细阅读开发人员手册,并使用Cypher refcard来帮助您。当您阅读完基本文档后,您可以轻松完成所提出的问题。