是否可以根据密码查询中的某些条件创建变量并进行赋值?

时间:2015-07-30 20:28:32

标签: neo4j conditional cypher case-statement

我正在尝试创建一个值数组,这些值将根据案例测试的结果进行分配。此测试将在我已经知道的查询中使用查询中的预设值。

我试图在案例测试中嵌入的查询是这样的:

WITH SPLIT (('07/28/2015'), '/' AS cd
MATCH (nodeA: NodeTypeA)-(r:ARelation)->(nodeB: NodeTypeB)
WITH cd, SPLIT (nodeA.ADate, '/') AS dd, nodeA, nodeB, r
WHERE
    (TOINT(cd[2])> TOINT(dd[2])) OR (TOINT(cd[2]= TOINT(dd[2]) AND ((TOINT(cd[0])> TOINT(dd[0])) OR (TOINT(cd[0])= TOINT(dd[0]) AND (TOINT(cd[1])>= TOINT(dd[1])))))
RETURN nodeA, nodeB, r

我想用当前日期6个月的任何日期替换当前日期,我想出了类似的东西,虽然我不知道我会把它放在我的查询中,或者它是否会起作用(例如我以某种方式初始化新变量?):

WHEN ((TOINT(cd[0])> 6))
THEN 
  TOINT(fd[2])=TOINT(cd[2])+1, TOINT(fd[0])=TOINT(cd[0])-6, TOINT(fd[1])=TOINT(cd[1])
ELSE
  TOINT(fd[2])=TOINT(cd[2]), TOINT(fd[0])=TOINT(cd[0])+6, TOINT(fd[1])=TOINT(cd[1])
然后,

fd会替换原始查询cd段中的WHERE。我的案例测试将在哪里进行,是否正确编写(如果没有,有什么问题),我是否还需要添加其他内容才能使其全部工作?

2 个答案:

答案 0 :(得分:2)

只需使用WITH块进行计算并将其绑定到新变量,如下所示:

WITH 2 + 2 as y RETURN y;

这基本上将值4分配给y。

在您的查询中,您已经有一个很大的WITH块。只需将计算放入那些绑定到新变量的计算中,然后就可以在后续表达式中引用这些变量。

请勿尝试修改这些变量,只需根据需要创建新变量(使用新的WITH块)。如果您需要可以实际更改的变量,那么......嘿,您正在使用数据库,这是存储和更新信息的最终方式。创建一个新节点,然后根据需要更新它。 :)

答案 1 :(得分:1)

这是我提出的解决方案 说明:我在我的查询中声明了四个变量,即name1,name2,ken和lana,我使用这些变量创建MATCH模式(在MATCH子句中)并过滤Where子句中的变量。

WITH    "Lau" AS name1,
        "L" AS name2,
        "Keanu Reeves" AS ken,
        "Lana Wachowski" AS lana
MATCH(x:Person{ name: ken})-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(y:Person),
        (x1:Person{name: lana})-[:DIRECTED]->(m)<-[:DIRECTED]-(y1:Person)

WHERE y.name CONTAINS name1 OR
      y.name CONTAINS name2 OR
      (y.name CONTAINS name1 AND y.name CONTAINS name2)
RETURN x, m, y, x1;