2014-02-18 68 views
0

我需要能夠在neo4j中創建或更新節點。我正在使用節點js。如何在nodejs中構造傳遞參數的密碼查詢

我想用參數來完成這個。

我需要構造一個暗號查詢作爲..

MERGE (user:Person:User {email: {props}.email}) 
ON CREATE user = {props} SET user.created = timestamp() 
ON MATCH SET user.lastSeen = timestamp() 
RETURN user' 

我已經構造出查詢參數的節點..

node={props:{name:'shekar',email:'[email protected]',age:10}} 

如何構建CYPHER查詢?

我想構建這樣的暗號..

cypherQuery='MERGE (user:Person:User {email: ' + node.props.email + '}) 
ON CREATE user = ' + node.props + ' SET user.created = timestamp() 
ON MATCH SET user.lastSeen = timestamp() 
RETURN user'; 

我得到這個錯誤:

errorError: Invalid input '@': expected an identifier character, node labels, a property map, a relationship pattern, '(', '.', '[', "=~", IN, IS, '*', '/', '%', '^', '+', '-', '<', '>', "<=", ">=", '=', "<>", "!=", AND, XOR, OR, ',' or '}' (line 1, column 40) 
"MERGE (user:Person:User {email: [email protected]}) ON CREATE user = [object Object] SET user.created = timestamp() ON MATCH SET user.lastSeen = timestamp() RETURN user" 
  • 協噶爾

回答

0

你必須寫在電子郵件中雙引號,否則Cypher不會將其作爲字符串獲取:

... {email: "' + node.props.email + '"} ... 

更多,因爲你在這裏的錯誤聲明,請參閱:

errorError: ... ON CREATE user = [object Object] SET user.created = timestamp() ON MATCH SET user.lastSeen = timestamp() RETURN user"

您有用戶的某些問題過分 - 它只是在電子郵件之後的,所以你現在不看它。

我會建議通過它在查詢之前,它字符串化:

CREATE user = ' + (JSON.stringify(node.props) + ' 

而且在這裏,檢查報價。

作爲一般方法,我會建議看到Micheal Hunger答案。

3

不要這樣做,擺在首位。

Cypher對名爲parameters的全部支持都被用作查詢的一部分。然後參數值作爲map/json-object傳遞給查詢執行。

就像你在問題的第一部分中使用的一樣。不知道爲什麼你放棄你的問題的第二部分?

cypherQuery=' 
MERGE (user:Person:User {email: {props}.email}) 
ON CREATE SET user = {props}, user.created = timestamp() 
ON MATCH SET user.lastSeen = timestamp() 
RETURN user'; 

params = {props: {email: "[email protected]", name:"A name"}} 
+0

整個Neo4j網站似乎最近都在改組。許多博客和SO帖子上的鏈接斷開。 –

0

邁克爾飢餓是對從參數處理的角度,而是你的具體問題是什麼,當你在級聯的電子郵件地址,沒有用引號包圍 - 所以它被輸入爲{電子郵件:citippur @ abc.com ...而不是{email:「[email protected]」... ...