Neo4j count()返回的值不正确

Neo4j count()返回的值不正确,neo4j,cypher,Neo4j,Cypher,我有以下疑问: MATCH (ld:Lead{id:'50309649-f892-4819-aa31-e34f3844aecd'})-[:IS_IN]->(pc:PostCode)<-[:COVERS]-(advisor:User{userType:30, isApproved:true, isUnavailable:false})-[:HAS]->(q:Qualification)<-[:SUPPORTED_BY]-(advType:AdviceType)<-[:

我有以下疑问:

MATCH (ld:Lead{id:'50309649-f892-4819-aa31-e34f3844aecd'})-[:IS_IN]->(pc:PostCode)<-[:COVERS]-(advisor:User{userType:30, isApproved:true, isUnavailable:false})-[:HAS]->(q:Qualification)<-[:SUPPORTED_BY]-(advType:AdviceType)<-[:REQUIRES]-(ld)
WHERE NOT (ld)-[:IS_ALLOCATED_TO]->(advisor)

OPTIONAL MATCH (ldExisting:Lead)-[rAllocated:IS_ALLOCATED_TO]->(advisor) WHERE rAllocated.status = 0 OR rAllocated.status = 10

return advisor, COUNT(ldExisting) as existingCount
MATCH(ld:Lead{id:'50309649-f892-4819-aa31-e34f3844aecd'})-[:IS_IN]->(pc:PostCode)(q:Qualification)(advisor),其中rAllocated.status=0或rAllocated.status=10
返回顾问,计数(ldExisting)为existingCount
它将返回一个“顾问”列表,还将返回每个顾问已经拥有的现有“分配给”关系的数量计数

在我的数据库中,我创建了一个“分配给”关系。因此,在本例中,它应该为受影响的advisor返回一个计数1。但是,它返回的值为3


对这个问题有任何想法都欢迎。谢谢大家!

记住,匹配将在图中找到所有匹配模式。最有可能发生的情况是,您的初始匹配正在查找涉及同一
advisor
节点的多个匹配,因此您将有多行
advisor
引用同一节点。鉴于您所说的计数存在于图表中,我猜在执行可选匹配之前,相同的
advisor
节点值在3个单独的行上是相同的(您可以通过在可选匹配之前执行
返回advisor
并注释掉其余部分来检查)

然后执行可选的匹配,并且(像所有密码操作一样)它在所有行上执行,这意味着它将从同一
advisor
节点执行相同的操作3次,遍历相同的关系,匹配到同一
ldExisting
节点,并为这3行计算同一节点,给你3的结果

要解决此问题,您需要确保使用的是
advisor
的不同节点,这样就不会有多行使用同一节点,如下所示:

MATCH (ld:Lead{id:'50309649-f892-4819-aa31-e34f3844aecd'})-[:IS_IN]->(pc:PostCode)<-[:COVERS]-(advisor:User{userType:30, isApproved:true, isUnavailable:false})-[:HAS]->(q:Qualification)<-[:SUPPORTED_BY]-(advType:AdviceType)<-[:REQUIRES]-(ld)
WHERE NOT (ld)-[:IS_ALLOCATED_TO]->(advisor)
WITH DISTINCT advisor
...

MATCH(ld:Lead{id:'50309649-f892-4819-aa31-e34f3844aecd')-[:IS_IN]->(pc:PostCode)(q:Qualification)太棒了,谢谢。这完全有道理。非常感谢!我刚试过这个,效果很好。