在 Neo4j 中排除 "symmetric" 结果
Excluding "symmetric" results in Neo4j
我想在 Neo4j 图形中查询包含两个可互换节点的结构,但我不希望每个 "symmetric" 响应都有两个唯一的响应。
如何在 Cypher 中表达两个节点可以互换?
一个例子:
我想使用以下查询在图中查找以下结构:
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 的默认行为是 return 以下两个图表:
(即p
和q
对Purchase1
和Purchase2
的赋值是相反的)
如何表达我查询中的元素p
和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
我想在 Neo4j 图形中查询包含两个可互换节点的结构,但我不希望每个 "symmetric" 响应都有两个唯一的响应。
如何在 Cypher 中表达两个节点可以互换?
一个例子:
我想使用以下查询在图中查找以下结构:
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 的默认行为是 return 以下两个图表:
(即p
和q
对Purchase1
和Purchase2
的赋值是相反的)
如何表达我查询中的元素p
和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