2016-08-23 116 views
1

我是Neo4j的初学者,我想将Spring数据查询转换为Neo4j查询。春季数据查询到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; 

这是我的弹簧数据查询。

IsAttendingEventDO getByEventEventIdAndPersonPersonId(String eventId, String personId); 

请帮我把这个查询转换成Neo4j查询。

Regards, Parth Solanki。

回答

1

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

对Cypher有基本的了解,这是一个非常简单的查询。只需匹配您感兴趣的模式(参加活动的人,使用已定义的标签),提供有关人员,事件和关系的变量,添加WHERE子句以限制匹配中的人员和事件给定的ID参数,然后返回一个适合在那里这些谓词用于匹配模式的关系:

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

编辑:

回答您的评论有关返回关系的列表(的:人出席了:事件),其中唯一给定的参数是eventId。

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

因此,如果您只是基于eventId获取关系,则不需要在:Person节点上提供变量,因为您没有任何谓词可以应用到它,而您没有使用它或返回它。你感兴趣的是参加事件的人与给定eventId的关系,并返回这些返回关系的集合。

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

再次,请通过开发人工读取,并且还使用了Cypher refcard为您排忧解难。当您阅读完基本文档后,您提出的问题很容易完成。

+0

嗨,谢谢你的回答。我会尝试这一点,让你知道...而且我还有另一个查询列表 findByEventEventId(String eventId);所以在这个它返回一个列表,所以我如何使这个查询? –

+0

已回答。当你有机会的时候请通读文档,这应该可以帮助你解决关于将你的Spring数据查询转换为Cypher的大多数其他问题;虽然没有明确的转换指南,但应根据您所寻求的模式和可用参数来变得直观。 – InverseFalcon

+0

好的,谢谢你! –