2014-11-02 49 views
1

我使用Transactional Cypher HTTP端點(http://localhost:7474/db/data/transaction/commit)發佈到Neo4j。我的JSON文章看起來像下面這樣。Neo4j match statement params error

"statements": [{ 
    statement: 'MATCH (n:user {username: {userdata}.username})\nRETURN n', 
    params: {userdata: {username: 'pewpewlasers'}} 
}] 

這將導致以下錯誤:

{ 
    code: 'Neo.ClientError.Statement.ParameterMissing', 
    message: 'Expected a parameter named userdata' 
} 

我不明白我錯過了什麼。

回答

4

MATCH子句接受literals as parameters。你用什麼地圖參數,如在MERGE

這是查詢的外觀應與文字:

"statements": [{ 
    statement: 'MATCH (n:user {username: {username}})\nRETURN n', 
    parameters: {username: 'pewpewlasers'} 
}] 

編輯:新的HTTP事務的端點改變帕拉姆關鍵參數http://neo4j.com/docs/stable/rest-api-transactional.html#rest-api-begin-a-transaction

+0

肯定的,但我也手動指定參數'n:user {username:{userdata} .username}'。您建議的問題只會在使用'n:user {userdata}'時發生。在我的情況下,它甚至無法找到'userdata'。 – pewpewlasers 2014-11-02 12:53:07

+0

是的,就是我所說的,你傳遞一張地圖,但你必須傳遞關鍵/值對中的參數。您不能在匹配子句中使用{map} .property,只有{propertyKey} – 2014-11-02 13:01:31

+0

但是如果我使用「Legacy Cypher HTTP端點」而不是「Transactional Cypher HTTP端點」,則「MATCH」中的{{}} .property仍然有效。 。任何想法爲什麼? – pewpewlasers 2014-11-02 13:31:39