密码查询:具有可选匹配的无限循环

时间:2014-01-12 02:10:03

标签: neo4j cypher

今天我试图扩展我在一个非常小的测试数据库上运行的查询,但我认为我必须触发某种无限循环,因为它一直执行直到它返回一个未定义的错误

所以我不知道问题是什么,我正在寻找建议......

此查询有效

MATCH (n:whatnot), (u:user) 
OPTIONAL MATCH (u)-[r1:favorites]->(n)

WHERE id(u)=1 

RETURN

  id(n) AS id ,
  CASE
    WHEN length((u)-[r1]->(n)) > 0 THEN 1
    ELSE 0
  END AS favorites

ORDER BY id DESC

这也有效

MATCH (n:whatnot), (u:user) , (m)

WHERE id(u)=1 AND id(m) = 73298 AND (n)-->(m)

RETURN id(n) AS id

但是如果我试图像这样一起运行它们,你甚至可以分享结果

MATCH (n:whatnot), (u:user) , (m)
OPTIONAL MATCH (u)-[r1:favorites]->(n)

WHERE id(u)=1  AND id(m) = 73298 AND (n)-->(m)

RETURN

  id(n) AS id ,
  CASE
    WHEN length((u)-[r1]->(n)) > 0 THEN 1
    ELSE 0
  END AS favorites

ORDER BY id DESC

进入无限循环

我错过了什么?

很多,谢谢你

1 个答案:

答案 0 :(得分:3)

你需要在OPTIONAL MATCH之前为顶部MATCH做WHERE。另外,如果可以,最好在MATCH中执行谓词模式。

MATCH (n:whatnot)-->(m), (u:user)
WHERE id(u)=1 AND id(m)=73298
OPTIONAL MATCH (u)-[r1:favorites]->(n)
RETURN
  id(n) AS id ,
  CASE
    WHEN length((u)-[r1]->(n)) > 0 THEN 1
    ELSE 0
  END AS favorites
ORDER BY id DESC