我想查询一个NEO4J图,以获取包含两个可互换节点的结构,但我不想为每个“对称”响应都提供两个唯一的响应。
如何在密码中表示两个节点可以互换?
我想通过以下查询在图中查找以下结构:
MATCH (c:Customer)-[]->(p:Purchase) MATCH (c:Customer)-[]->(q:Purchase) MATCH (p)-[]->(m:Company) MATCH (q)-[]->(m:Company) RETURN DISTINCT c, p, q, m
NEO4J的默认行为是返回以下两个图:
(即 p 和 q 到 Purchase1 和 Purchase2 颠倒过来)
p
q
Purchase1
Purchase2
我如何表达这些元素 磷 和 Q 在我的查询中是可互换的,我只需要上面的一个响应?
磷
Q
为了防止出现这些结果,通常会根据节点ID得出一个不等式:
WHERE id(p) < id(q)
也就是说,您可以像这样更清晰地形成这个查询(前提是您想要一个客户和一个公司之间的所有采购,至少从该客户向该公司进行两次采购):
MATCH (c:Customer)-->(p:Purchase)-->(m:Company) WITH c, m, collect(p) as purchases, count(p) as purchaseCount WHERE purchaseCount >= 2 RETURN c, m, purchases