将2个密码查询合并为1

时间:2013-12-07 10:27:47

标签: neo4j cypher

我正在使用图形数据库Neo4j。我想将以下两个密码查询合并为一个。

START a=node(2)
MATCH (a)<-[:TYPE]-(vendrs)<-[:FROM]-(prods) 
RETURN vendrs.name, count(prods)

START a=node(2)
MATCH (a)<-[:TYPE]-(vendrs)<-[:FROM]-(prods)
WHERE(prods.r?<>-1 and prods.f?<=0 and prods.I! = 1) 
RETURN vendrs.name, count(prods)

id为2的节点是一个超级节点,其节点通过TYPE关系表示与之相关的供应商,并且每个节点的节点都与FROM关系相关。

我想将它们组合成一个,所以我尝试了:

START a=node(2)
MATCH (a)<-[:TYPE]-(vendrs)<-[:FROM]-(prods)
RETURN vendrs.name,
    count(prods),
    filter(count(prods) where(prods.r?<>-1 and prods.f?<=0 and prods.I! = 1));

但它不起作用?我该如何纠正呢?

Error:SyntaxException: Unclosed parenthesis

1 个答案:

答案 0 :(得分:1)

不确定是什么版本的Neo4j,但我看到的2.0过滤器是

FILTER(x IN coll WHERE x.prop <> {value})

所以我假设你真正想要的是那些过滤产品的数量,而不是COUNT()上的FILTER()?

COUNT(FILTER(product IN products WHERE product.r?<>-1 AND product.f?<=0 AND product.I! = 1)) AS filterCount

没有尝试过,但这是有道理的。也用于全名(产品而不是产品或什么)只是为了让其他读者清楚。注意我不确定'!'是的,您可能最好查看Cypher关于所有'?'的性能提示可选的婴儿车,如果他们真的必须是可选的。