【问题标题】:Please Help Me Use "EXCEPT Clause" in "Neo4j"请帮我在“Neo4j”中使用“EXCEPT Clause”
【发布时间】:2024-01-14 01:53:01
【问题描述】:

我在 Neo4j 中有一些节点,有友谊关系。 现在我想查询一个节点(例如:Kate)的朋友的朋友,除了已经和她成为朋友的节点。 我试过这个命令,但它不起作用:

MATCH ( p:person {name:"Kate"} )-[friends_with*2..3] -> (pp:person)
WHERE (pp) NOT (p)->[friends_with]-(pp)
return pp;

  MATCH ( p:person {name:"Kate"} )-[friends_with*2..3] -> (pp:person)
    WHERE (pp) OUT [(p)->[friends_with]-(pp)]
    return pp;

如果有人可以提供帮助,我将不胜感激

【问题讨论】:

  • *2..3 会给你朋友的朋友以及朋友的朋友的朋友。如果您只想要朋友的朋友,请使用 *2。
  • 是的,我知道你的意思,但那不是问题。我的问题是下一个条件,即“除外”部分!例如,当我有:KATE --friends_with--ALICE 和 KATE--friend_with--TINA 和 ALICE--friends_with--TINA 和 ALICE--friends_with--SHILA。我想要查询,它只给了我名字,SHILA
  • 作为提示:始终将详细信息添加到“它不起作用”。是返回错误结果还是您的查询导致错误等。
  • 好的,谢谢@Joshua 的提示

标签: neo4j cypher social-networking except


【解决方案1】:

差不多了,只是语法:

MATCH (p:person {name:"Kate"})-[:friends_with*2..3]->(pp:person)
WHERE NOT ((p)-[:friends_with]->(pp))
return pp;

顺便说一句,您也考虑了方向。所以如果(pp)-[:friends_with]->(p),它不会被排除在外。如果那不是本意,那么就别说了。

【讨论】:

  • 谢谢你的回答,但它还没有工作:(我得到这个错误:类型不匹配:预期的关系但是 Collection(第 2 行,第 17 列(偏移量:80)) “哪里不是 ((p)-[friends_with]->(pp))”
  • 抱歉,打字太快了。 rel 类型中缺少 :,我已经编辑了答案