像neo4j中的查询一样参数化

Dev*_*per 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('');
Run Code Online (Sandbox Code Playgroud)

我试过这段代码,但它给出了错误:

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);
    }
});
Run Code Online (Sandbox Code Playgroud)

请告诉我哪里错了?

Ste*_*ter 5

您不能拥有属于文字的参数.你试过了

... WHERE ... lower(s.Name)=~'.*{name}.*'
Run Code Online (Sandbox Code Playgroud)

相反,整个正则表达式需要是参数值:

... WHERE ... lower(s.Name)=~ {name}
Run Code Online (Sandbox Code Playgroud)

你需要与你的串联值.*.*<value>.*在客户端和传递这个作为参数值.

编辑:

您也可以在Cypher中连接:

... WHERE ... lower(s.Name)=~'.*'+{name}+'.*'
Run Code Online (Sandbox Code Playgroud)

对于不区分大小写的正则表达式使用:

... WHERE ... s.Name =~'(?i).*'+{name}+'.*'
Run Code Online (Sandbox Code Playgroud)