Neo4j Cypher找到子节点没有属性值的节点

时间:2016-12-24 16:23:30

标签: neo4j cypher

好的,我在使用密码查询时遇到了麻烦。这是我到目前为止的查询:

MATCH (oi:OrderItem)<-[:CONTAINS]-(o:Order)
WHERE oi.productSku IN ['600790041f','600790041s','600790061','600791021f','600791021s','600791051f','600791051s','600791061af','600791061as','600791061f','600791061s','600791101','600791111','600792011f','600792011s','600792031f','600792031s','600792041f','600792041s']
WITH DISTINCT o
RETURN COUNT(o) AS orders, AVG(o.orderBaseGrandTotal) AS avg;

我正在尝试做的是返回上述SKU列表中仅包含产品的所有订单。上面的查询给了我所有包含带有其中一个SKU的产品的订单。但是,我需要过滤掉在SKU列表之外还有产品的订单(我不想要那些订单)。

基本上,我试图说给我所有在此SKU列表中只有产品的订单,并向我返回订单数量和这些订单的平均订单价值。我坚持的部分是过滤掉在SKU列表之外也有产品的订单。

1 个答案:

答案 0 :(得分:2)

您需要计算每个订单的sku列表中的项目数,然后将其与每个订单的项目总数进行比较。

MATCH (oi:OrderItem)<-[:CONTAINS]-(o:Order)
WHERE oi.productSku IN ['600790041f','600790041s','600790061',...]

// get the total number of sku items per order
WITH o, count(*) as num_items

// only return the orders where the number of items in the order
// is equivalent to the number of sku items matched
WHERE size((o)-[:CONTAINS]->()) = num_items
RETURN COUNT(o) AS orders, AVG(o.orderBaseGrandTotal) AS avg;
相关问题