首页 > 解决方案 > 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"

标签: typescriptneo4jcypher

解决方案


事实证明你不能为这些类型的结构参数化。

参数不能用于以下构造,因为它们构成了编译到查询计划中的查询结构的一部分:

  • 属性键;所以, MATCH (n) WHERE n.$param = 'something' 无效
  • 关系类型
  • 标签

我自己构建了字符串,如下所示:

'WHERE a.id = ' + userId + ' AND b.id = ' + todoId +

推荐阅读