typescript - Neo4j JS 驱动程序密码“WHERE”子句不适用于参数
问题描述
我有一个简单的函数,可以将用户与 Id 匹配,并且应该创建这样的关系。
const createRelation = (userId: string, todoId: string, relationship: string) => {
return session.run(
'MATCH (a:User),(b:Todo)' +
'WHERE a.id = $userId AND b.id = $todoId' +
'CREATE (b)-[r:$relationship]->(a)' +
'RETURN r',
{
userId: userId,
todoId: todoId,
relationship: relationship,
}
);
}
此代码不会引发任何错误,但也不会创建关系。如果我手动设置 和 的值userId
,例如,它工作正常!我使用的参数错误吗?如果是这样,怎么做?(我也已经尝试手动设置关系类型,如果我使用参数,则不会创建任何关系。)todoId
"1"
解决方案
事实证明你不能为这些类型的结构参数化。
参数不能用于以下构造,因为它们构成了编译到查询计划中的查询结构的一部分:
- 属性键;所以, MATCH (n) WHERE n.$param = 'something' 无效
- 关系类型
- 标签
我自己构建了字符串,如下所示:
'WHERE a.id = ' + userId + ' AND b.id = ' + todoId +
推荐阅读
- django - django (DRF) 的 update_or_create 中的使用条件
- vespa - 没有会话 id,如何找到应用程序的内容 url。我只知道应用程序名称
- java - 在 RestTemplate 代码中得到 400 Request Bad Error 但在 SOAPUI 中得到正确的响应
- python - 如何将时间序列转换为从 00:00.00 开始的 %M:%S.%f
- java - MuteSetup 命令未设置有效的静音命令
- flutter - Dart @macro 在评论中
- node.js - Typegoose 类定义的静态方法返回空数组
- mysql - 是否有替代 ALTER TABLE AUTO_INCREMENT = 1 的方法?
- flutter - 颤振:为什么当textField失去焦点时输入内容消失?
- html - 如何使用 css 在 HTML 中制作内容