Neo4j JS驱动程序密码“ WHERE”子句不适用于参数

时间:2019-12-24 09:31:31

标签: typescript neo4j cypher

我有一个简单的函数,可将用户与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,
        }
    );
}

此代码不会引发任何错误,但也不会创建关系。如果我手动设置userIdtodoId的值,例如到"1",效果很好!我使用的参数是否错误?如果是这样,怎么办? (我也已经尝试过手动设置关系类型,如果使用参数,则不会创建任何关系。)

1 个答案:

答案 0 :(得分:0)

结果是您无法参数化for these kinds of constructs.

  

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

     
      
  • 属性键;因此,MATCH(n)在哪里n。$ param ='something'无效
  •   
  • 关系类型
  •   
  • 标签
  •   

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

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