我正在使用一个Neo4j嵌入式数据库,使用Java API和Cypher查询,使用这样的节点和关系模型:
MATCH (t:Task)-[:ASIGNED_TO]->(p:Person)
现在,以下字段为每种节点的属性:
Task (id, estimated_time,closed, priority, evaluation, start_date, end_date)
Person(id,name)
使用此公式:
A = 3*count(B)+2*count(C)+count(D)
其中B是优先级为“高”的任务,C:“中”,D:“低”。我想要一个计算人的因子的查询(这是使用WHERE子句指定其id)。总结:获取人员的任务,知道哪些人具有自定义优先级,并使用前一个表达式计算A.当然,我尝试过这样的一些查询:
MATCH (p:Person{id: 178}) //with the person with id 178
WITH p
MATCH (t1:Task)-[:ASIGNED_TO]->p
WHERE t1.priority = 'High'
WITH p, count(t1) as B
MATCH (t2:Task)-[:ASIGNED_TO]->p
WHERE t2.priority = 'Medium'
WITH p, B, count(t2) as C
MATCH (t3:Task)-[:ASIGNED_TO]->p
WHERE t3.priority = 'Low'
WITH p,B,C,count(t3) as D
RETURN p.id, (3*B+2*C+D)
这会返回0行,但如果我只是尝试
MATCH (p:Person{id: 178})
WITH p
MATCH (t1:Task)-[:ASIGNED_TO]->p
WHERE t1.priority = 'High'
WITH p, count(t1) as B
RETURN p.id, B
它正确返回有21个具有高优先级的任务。有什么想法吗?
答案 0 :(得分:1)
拥有178个任务的人员是否具有所有类型的优先级?如果没有,试试这个:
MATCH(p:Person {id:178})
与p
可选匹配(t1:任务) - [:ASIGNED_TO] - > p
在哪里t1.priority ='高' WITH p,计数(t1)为B
可选匹配(t2:任务) - [:ASIGNED_TO] - > p
在哪里t2.priority ='中等'
用p,B,count(t2)作为C
可选比赛(t3:任务) - [:ASIGNED_TO] - > p
在哪里t3.priority ='低'
用p,B,C,计数(t3)作为D
返回p.id,(3 * B + 2 * C + D)
其他选项:尝试使用PROFILE
命令获取有关Cypher查询执行的更多信息。 (link)