在neo4j中基于两个不同的where条件返回子查询

时间:2017-03-24 09:53:40

标签: neo4j

我在SQL中有这个查询:

  Select Id, CrawlerId,CrawlerName,
 (SELECT Count(*) from CrawlerResult cr where cr.CrawlerId = cs.CrawlerId  and            IsNew=1) as LastRunResult ,
 (SELECT Count(*) from CrawlerResult cr where cr.CrawlerId = cs.CrawlerId  ) as TotalResult
  FROM CrawlerScheduler cs 

如何通过组合CrawlerScheduler和CrawlerResult节点将此查询转换为neo4j cypher?

1 个答案:

答案 0 :(得分:1)

我假设您已经用SQL中的实际关系替换了SQL中的外键关系,并且您使用的是实际的布尔值而不是1和0?类似的东西:

(:CrawlerScheduler)-[:RESULT]->(:CrawlerResult)

如果是这样,那么等效的Cypher查询可能如下所示:

MATCH (cs:CrawlerScheduler)
WITH cs, SIZE((cs)-[:RESULT]->()) as TotalResult
OPTIONAL MATCH (cs)-[:RESULT]->(cr)
WHERE cr.IsNew
WITH cs, TotalResult, COUNT(cr) as LastRunResult
RETURN cs.Id, cs.CrawlerId, cs.CrawlerName, LastRunResult, TotalResult

编辑

我将第二场比赛更改为OPTIONAL MATCH,以防日程安排程序没有结果,或者没有新结果。