1

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

在模型中,我有几个“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 子句。在这种情况下,num_products 属性必须与仅与 B 和 C 有关系的节点匹配“2”。我在这里担心的是,我必须深入研究每个返回的节点的属性,而流行的产品会使返回列表更大。

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

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

4

1 回答 1

2

你可以试试这个:

Start b = node(16), c = node(37)
MATCH (b)<-[:PRODUCT_USED]-(n)-[:PRODUCT_USED]->(c)
WHERE length((n)-[:PRODUCT_USED]->(c)) == 2
RETURN n
于 2013-11-03T15:26:51.167 回答