【问题标题】:Combine 2 cypher queries into 1将 2 个密码查询合并为 1 个
【发布时间】:2013-12-07 10:27:46
【问题描述】:

我正在使用图形数据库 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 关系与其相关的供应商,并且每个节点的 prod 都通过 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

【问题讨论】:

  • start a=node(2) match (a)&lt;-[:TYPE]-(vendrs)&lt;-[:FROM]-(prods) where prods.r?&lt;&gt;-1 and prods.f?&lt;=0 and prods.I! = 1 return vendrs.name,count(prods) 怎么样?
  • 为了清楚起见,您正在尝试返回供应商列表、他们的产品总数以及满足特定条件的产品数量(总数量的子集)。准确吗?
  • @JonathanF:是的,这就是我想在一个查询中返回的内容

标签: neo4j cypher


【解决方案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 上查看有关所有“?”的性能提示。可选的婴儿车,如果它们真的必须是可选的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
相关资源
最近更新 更多