首页 > 解决方案 > 检查子图是否整体满足条件

问题描述

我觉得很难解释,所以考虑下图 在此处输入图像描述

我正在尝试选择所有满足仓库要求的产品

在此示例中,我需要选择最大尺寸为 5 且最大重量为 10 的所有产品。

为简化起见,我只有 MAX(没有 MIN 或 EQ)约束,因此可以对运算符进行硬编码。

我尝试使用 COLLECT 并使用 ALL 运算符对需求子图进行分组,但失败了。

查询以创建图表

CREATE
  // NODES
  (warehouse:WAREHOUSE{name:'My Warehouse'}),
  (smallProduct:PRODUCT{name:'Small Product'}),
  (largeProduct:PRODUCT{name:'Large Product'}),
  // RELATIONSHIPS
  (size:CONSTRAINT{name:'Size'}),
  (weight:CONSTRAINT{name:'Weight'}),
  (warehouse)-[:LIMIT{value:5}]->(size),
  (warehouse)-[:LIMIT{value:5}]->(weight),
  (smallProduct)-[:AMOUNT{value:3}]->(size),
  (smallProduct)-[:AMOUNT{value:2}]->(weight),
  (largeProduct)-[:AMOUNT{value:10}]->(size),
  (largeProduct)-[:AMOUNT{value:4}]->(weight)

更新

以下查询显然解决了这个问题:

MATCH  (warehouse:WAREHOUSE)
MATCH rel = ((warehouse)-[limit:LIMIT]->(constraint:CONSTRAINT)<-[amount:AMOUNT]-(product:PRODUCT))
WITH warehouse, product, collect(relationships(rel)) as paths
WHERE all( p in paths WHERE p[0].value > p[1].value )
return product

我想知道是否有更好的解决方案。

标签: neo4jcypher

解决方案


推荐阅读