代码之家  ›  专栏  ›  技术社区  ›  j6m8

排除NEO4J中的“对称”结果

  •  1
  • j6m8  · 技术社区  · 7 年前

    我想查询一个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
    

    the query

    NEO4J的默认行为是返回以下两个图:

    A symmetric graph Another symmetric graph

    (即 p q Purchase1 Purchase2 颠倒过来)

    我如何表达这些元素 Q 在我的查询中是可互换的,我只需要上面的一个响应?

    1 回复  |  直到 7 年前
        1
  •  1
  •   InverseFalcon    7 年前

    为了防止出现这些结果,通常会根据节点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
    
    推荐文章