使用neo4j 1.9.2,我试图在我的图中找到与另一个节点具有一对一关系的所有节点。假设我的图表中有一些人,我想找到所有只有一个朋友(自 2013 年以来)的人,而这个朋友只有另一个人作为朋友,没有其他人。作为回报,我想拥有所有这些“孤立”的朋友。
我尝试了以下方法:
START n=node(*) MATCH n-[r:is_friend]-m-[s:is_friend]-n
WHERE r.since >= 2013 and s.since >= 2013
WITH n, m, count(r), count(s)
WHERE count(r) = 1 AND count(s) = 1
RETURN n, m
但是这个查询并没有做它应该做的事情——它只是什么也不返回。
注意:两个人之间只存在一种关系。所以一个朋友有一个传入的关系,另一个是一个传出的关系。此外,这两个人可能还有其他一些关系,比如“works_in”左右,但我只想检查两个人之间是否存在 *is_friends* 类型的 1:1 关系。
编辑:如果使用 node(*) 作为起点,Stefan 的建议非常有效。但是,当尝试对一个特定节点进行此查询作为起点(例如 start n=node(42))时,它不起作用。在这种情况下,解决方案会是什么样子?
更新:我仍然想知道这个场景的解决方案:如何检查给定的起始节点是否与特定关系类型的另一个节点具有一对一的关系。有任何想法吗?