Neo4j 获取每个可选匹配的计数

Neo4j 获取每个可选匹配的计数,neo4j,cypher,Neo4j,Cypher,正在尝试运行以下查询: MATCH(u:User) OPTIONAL MATCH (u)-[:USER_TYPE]->(adminType:UserType {type:'Admin'}) OPTIONAL MATCH (u)-[:USER_TYPE]->(userType:UserType {type:'User'}) RETURN DISTINCT { adminCount: count(adminType), userCount: count(userType) } 这

正在尝试运行以下查询:

MATCH(u:User) 
OPTIONAL MATCH (u)-[:USER_TYPE]->(adminType:UserType {type:'Admin'}) 
OPTIONAL MATCH (u)-[:USER_TYPE]->(userType:UserType {type:'User'}) 
RETURN DISTINCT { adminCount: count(adminType), userCount: count(userType) }

这将返回管理员的计数,但用户为0。如果我切换可选匹配并首先设置用户,那么我会得到用户的计数,但不会得到管理员的计数。我怎样才能两者兼得

不要使用
可选匹配
尝试以下操作:

MATCH (u:User)-[:USER_TYPE]->(adminType:UserType {type:'Admin'})
WITH count(*) AS adminCount
MATCH (u:User)-[:USER_TYPE]->(userType:UserType {type:'User'})
WITH count(*) AS userCount, adminCount
RETURN {adminCount: adminCount, userCount: userCount}
在每个模式上进行匹配,然后使用
WITH
子句计算匹配的数量,以便只进行计数

编辑

正如@cybersam所指出的,上述查询考虑了关系的数量,以获得类型属性值为“Admin”和“User”(不考虑关系)的
UserType
节点的计数:


你能解释一下你想计算什么吗?我想我的密码很容易理解。只是尝试获取每个用户类型的计数。看起来您并不是在尝试这样做,因为您正在查询中包含
user
节点。要获得每种类型的计数,您只需要执行以下操作(根本不涉及
User
节点):
MATCH(adminType:UserType{type:'Admin'})和count(*)作为adminCount匹配(UserType:UserType{type:'User'})返回{adminCount:adminCount,userCount:count(*)}
我知道混淆的地方了。感谢分享您的解决方案。注意:这将计算
Admin
User
类型与
User
节点相关的次数。提问者在评论中表示,他/她只是想“了解每种用户类型的数量”。谢谢@cybersam-我还没有意识到这一点。答案已更新。
MATCH (adminType:UserType {type:'Admin'}) WITH count(adminType) AS adminCount
MATCH (userType:UserType {type:'User'}) WITH adminCount, count(userType)
RETURN {adminCount: adminCount, userCount: userCount}