Parameters 如何构造用于在nodejs中传递参数的cypher查询

Parameters 如何构造用于在nodejs中传递参数的cypher查询,parameters,neo4j,cypher,Parameters,Neo4j,Cypher,我需要能够在neo4j中创建或更新节点。我正在使用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={prop

我需要能够在neo4j中创建或更新节点。我正在使用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:'shekar@abc.com',age:10}}
如何构造密码查询

我正试图像这样构造密码

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: ctippur@abc.com}) ON CREATE user = [object Object] SET user.created = timestamp() ON MATCH SET user.lastSeen = timestamp() RETURN user"
errorError:无效输入“@”:应为标识符字符、节点标签、属性映射、关系模式“(”、“.”、“[”、“=~”、IN、IS、“*”、“/”、“%”、“^'、“+”、“-”、“=”、“=”、“!=”、和、XOR、或“、”或“}”(第1行,第40列)
“合并(用户:个人:用户{电子邮件:ctippur@abc.com})在创建时user=[object object]SET user.created=timestamp()在匹配时SET user.lastsseen=timestamp()返回用户“
  • 谢卡尔

您必须用双引号写电子邮件,否则Cypher无法将其作为字符串:

... {email: "' + node.props.email + '"} ...
更多信息,请参见此处的错误声明:

errorError:…在创建用户时=[object object]在匹配集用户时设置用户。在匹配集用户时创建=时间戳()

你也与用户有一些问题-它只是在电子邮件之后,所以你现在看不到它

我建议在将其传递到查询中之前对其进行字符串化:

CREATE user = ' + (JSON.stringify(node.props) + '
同样在这里,检查引号


作为一般方法,我建议查看Micheal Hunger的答案。

您必须用双引号写电子邮件,否则Cypher不会将其作为字符串:

... {email: "' + node.props.email + '"} ...
更多信息,请参见此处的错误声明:

errorError:…在创建用户时=[object object]在匹配集用户时设置用户。在匹配集用户时创建=时间戳()

你也与用户有一些问题-它只是在电子邮件之后,所以你现在看不到它

我建议在将其传递到查询中之前对其进行字符串化:

CREATE user = ' + (JSON.stringify(node.props) + '
同样在这里,检查引号


作为一般方法,我建议查看Micheal Hunger的答案。

您必须用双引号写电子邮件,否则Cypher不会将其作为字符串:

... {email: "' + node.props.email + '"} ...
更多信息,请参见此处的错误声明:

errorError:…在创建用户时=[object object]在匹配集用户时设置用户。在匹配集用户时创建=时间戳()

你也与用户有一些问题-它只是在电子邮件之后,所以你现在看不到它

我建议在将其传递到查询中之前对其进行字符串化:

CREATE user = ' + (JSON.stringify(node.props) + '
同样在这里,检查引号


作为一般方法,我建议查看Micheal Hunger的答案。

您必须用双引号写电子邮件,否则Cypher不会将其作为字符串:

... {email: "' + node.props.email + '"} ...
更多信息,请参见此处的错误声明:

errorError:…在创建用户时=[object object]在匹配集用户时设置用户。在匹配集用户时创建=时间戳()

你也与用户有一些问题-它只是在电子邮件之后,所以你现在看不到它

我建议在将其传递到查询中之前对其进行字符串化:

CREATE user = ' + (JSON.stringify(node.props) + '
同样在这里,检查引号


作为一般方法,我建议看到Micheal Hunger的答案。

首先不要这样做。

Cypher完全支持作为查询一部分使用的named。然后,参数值作为map/json对象传递给查询执行

就像你在问题的第一部分使用的。不知道你为什么在问题的第二部分放弃这个

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: "foo@bar.com", name:"A name"}}

首先不要这样做。

Cypher完全支持作为查询一部分使用的named。然后,参数值作为map/json对象传递给查询执行

就像你在问题的第一部分使用的。不知道你为什么在问题的第二部分放弃这个

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: "foo@bar.com", name:"A name"}}

首先不要这样做。

Cypher完全支持作为查询一部分使用的named。然后,参数值作为map/json对象传递给查询执行

就像你在问题的第一部分使用的。不知道你为什么在问题的第二部分放弃这个

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: "foo@bar.com", name:"A name"}}

首先不要这样做。

Cypher完全支持作为查询一部分使用的named。然后,参数值作为map/json对象传递给查询执行

就像你在问题的第一部分使用的。不知道你为什么在问题的第二部分放弃这个

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: "foo@bar.com", name:"A name"}}

Michael Hunger从参数处理的角度来看是正确的,但您的具体问题是,当您在电子邮件地址中连接时,您没有用引号括起来-因此它被输入为{email:citippur@abc.com...而不是{电子邮件:citippur@abc.com"从参数处理的角度来看,Michael Hunger是正确的,但您的具体问题是,当您在电子邮件地址中连接时,您没有用引号括起来-因此它被输入为{email:citippur@abc.com...而不是{电子邮件:citippur@abc.com"从参数处理的角度来看,Michael Hunger是正确的,但您的具体问题是,当您在电子邮件地址中连接时,您没有用引号括起来-因此它被输入为{email:citippur@abc.com...而不是{电子邮件:citippur@abc.com"从参数处理的角度来看,Michael Hunger是正确的,但您的具体问题是,当您在电子邮件地址中连接时,您没有用引号括起来-因此它被输入为{email:citippur@abc.com...而不是{电子邮件:citippur@abc.com"…

整个Neo4j网站最近似乎被洗牌了。博客和帖子上的很多断开的链接。整个Neo4j网站最近似乎被洗牌了。很多断开的链接