2016-08-23 118 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

好的,謝謝你! –