【问题标题】:Neo4j Exact Match Query to Only Specified PatternNeo4j 精确匹配查询仅指定模式
【发布时间】:2013-10-31 19:32:08
【问题描述】:

我正在对产品使用模式进行建模项目,但我无法确定与单个模式完全匹配的最佳方法

在模型中,我有几个“product_pattern”节点充当代表各种产品的多个节点的中心或枢纽。每个产品节点都是唯一的,可以连接到任何 product_pattern。一系列产品模式节点可能如下所示:

--pattern_1
--- Product A
--- Product B
--- Product C

--pattern_2
--- Product A
--- Product B
--- Product C
--- Product D

--pattern_3
--- Product B
--- Product C

我想在图表中查询使用产品 B 和 C 且仅使用 B 和 C 的 product_patterns。如果我只是使用:

Start b = node(16), c = node(37)
MATCH (b)<-[:PRODUCT_USED]-(n)-[:PRODUCT_USED]->(c)
RETURN n

我会返回所有 product_patterns,因为它们都与 B 和 C 有关系。要从我查询的内容中删除具有其他关系的匹配项,我预计有两种策略..

  1. 在 product_pattern.num_products 的每个模式节点中创建一个属性,以在初始 MATCH 之后用于 WHERE 子句。在这种情况下,对于仅与 B 和 C 有关系的节点,num_products 属性必须匹配“2”。我担心的是,我必须深入研究每个返回的节点的属性,而流行的产品会使返回列表更大。

  2. 为图表中的所有其他产品创建一个 WHERE NOT 子句,我不会与...不理想并且很可能遍历整个图表。

是否有任何优雅的方法来确认您的查询返回的正是您要求的关系匹配,而不是与您的查询匹配但也有其他关系的节点?

【问题讨论】:

    标签: neo4j cypher exact-match


    【解决方案1】:

    你能试试这个吗:

    Start b = node(16), c = node(37)
    MATCH (b)<-[:PRODUCT_USED]-(n)-[:PRODUCT_USED]->(c)
    WHERE length((n)-[:PRODUCT_USED]->(c)) == 2
    RETURN n
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多