2014-12-04 43 views
2

我想創建此查詢作爲參數化查詢。參數化如neo4j中的查詢

var query = ["Match (name:Name)-[r:IN_CLASS]->(class:Class)-[r1:HAS_STUDENTS]->(s:Student) where id(s)=",rollno," and lower(s.Name)=~'.*",name,".*' RETURN id(s),s.Name limit 5"].join(''); 

我曾嘗試這個代碼,但它給錯誤:

var query = ["Match (name:Name)-[r:IN_CLASS]->(class:Class)-[r1:HAS_STUDENTS]->(s:Student) where id(s)=",rollno," and lower(s.Name)=~'.*{name}.*' RETURN id(s),s.Name limit 5"].join(''); 

db.query(query , {name : name} , function(err,results){ 
    if (err) return callback(err); 
    if(results){ 
     return callback(null,results); 
    } 
    else{ 
     return callback(null,false); 
    } 
}); 

請告訴我,我錯了嗎?

+0

你可以發佈你的錯誤? – 2014-12-04 13:47:28

回答

5

不能有參數是文字的一部分。你試過

... WHERE ... lower(s.Name)=~'.*{name}.*' 

而是整個正則表達式必須參數值:

... WHERE ... lower(s.Name)=~ {name} 

您需要使用您的.*值連接到.*<value>.*在客戶端和傳球爲參值。

編輯:

您也可以連接在Cypher支架:

... WHERE ... lower(s.Name)=~'.*'+{name}+'.*' 

而對於不區分大小寫的正則表達式使用:

... WHERE ... s.Name =~'(?i).*'+{name}+'.*'