Neo4j 给定类型的关系小于X的密码匹配节点

Neo4j 给定类型的关系小于X的密码匹配节点,neo4j,cypher,Neo4j,Cypher,有了这些数据,我想用密码查询neo4j数据库,查找拥有少于X个朋友的所有用户,其中X是他们自己的friend\u limit属性。我尝试了几个COUNT查询,但未能得到一致的结果 例如,在本例中,我希望收到除Joe(他有两个朋友中的两个)和Ella(how有一个朋友中的一个)之外的所有用户的结果集 编辑:我已经做到了这一点,但我找不到一种方法将Ann也包括在结果集中,她可能失踪了,因为她没有任何与关系的朋友,\u因此无法匹配部分 MATCH (n:User)-[r:FRIENDS_WITH]

有了这些数据,我想用密码查询neo4j数据库,查找拥有少于X个朋友的所有用户,其中X是他们自己的
friend\u limit
属性。我尝试了几个
COUNT
查询,但未能得到一致的结果

例如,在本例中,我希望收到除Joe(他有两个朋友中的两个)和Ella(how有一个朋友中的一个)之外的所有用户的结果集


编辑:我已经做到了这一点,但我找不到一种方法将Ann也包括在结果集中,她可能失踪了,因为她没有任何与关系的
朋友,\u因此无法匹配
部分

MATCH (n:User)-[r:FRIENDS_WITH]-(u:User) 
WITH n, count(r) AS nr_of_friends 
WHERE nr_of_friends < n.friend_limit 
RETURN n, n.friend_limit, nr_of_friends
匹配(n:User)-[r:FRIENDS\u WITH]-(u:User)
使用n,将(r)算作n个朋友
其中,朋友数<朋友数限制
返回n,n.朋友数限制,朋友数

不确定是否有更好的方法


不确定是否有更好的方法可以做到这一点

我会用与@luane类似的方法,只是简单一点:

MATCH (u:User) 
OPTIONAL MATCH (u)-[:FRIENDS_WITH]-(f:User) 
WITH u, count(f) AS friendCount 
WHERE friendCount < u.friend_limit 
RETURN u, friendCount
匹配(u:用户)
可选匹配(u)-[:朋友与]-(f:用户)
使用u,将(f)计数为friendCount
其中friendCount

我离开了
f:User
,因为我认为这会让它更有效率,特别是如果模型在以后更改,以便用户可以与用户以外的其他人成为朋友(但可能会有不同的关系类型)。

,再简单一点:

MATCH (u:User) 
OPTIONAL MATCH (u)-[:FRIENDS_WITH]-(f:User) 
WITH u, count(f) AS friendCount 
WHERE friendCount < u.friend_limit 
RETURN u, friendCount
匹配(u:用户)
可选匹配(u)-[:朋友与]-(f:用户)
使用u,将(f)计数为friendCount
其中friendCount

我离开了
f:User
,因为我认为这会让它更有效率,特别是如果模型在以后更改,以便用户可以与用户以外的其他人成为朋友(但可能会有不同的关系类型)。

这是期望的结果,谢谢!我不会接受,只是看看有没有人能想出解决比赛的办法。我不知道这是否是一个问题。酷,我也在等待,看看有什么更好的方法来做到这一点。在一个有大量用户的图上,这可能是一个问题,因为你要匹配所有用户,但你又想这样做:-)我认为你不需要u
,除非用户可以与非用户成为朋友,否则你不需要绑定“其他”用户(
f
)。我尝试用
分析查询,以查看差异,但分析程序在
java.lang.AssertionError中失败:无法分析同一管道两次,不知道为什么。这是理想的结果,谢谢!我不会接受,只是看看有没有人能想出解决比赛的办法。我不知道这是否是一个问题。酷,我也在等待,看看有什么更好的方法来做到这一点。在一个有大量用户的图上,这可能是一个问题,因为你要匹配所有用户,但你又想这样做:-)我认为你不需要u
,除非用户可以与非用户成为朋友,否则你不需要绑定“其他”用户(
f
)。我尝试使用
分析查询,以查看差异,但分析程序使用
java.lang.AssertionError失败:无法分析同一管道两次,不知道原因。您可能可以拆分查询,要对有
关系的
朋友的人使用正常匹配,对没有关系的人使用另一个正常匹配。您可能可以拆分查询,要对有
关系的
朋友的人使用正常匹配,对没有关系的人使用另一个正常匹配。确实,with似乎是多余的。尽管仍然不确定是否有办法删除整个用户匹配项。我认为,即使按照Michael的建议拆分查询,也意味着需要一个完整的用户匹配,以找到没有任何Friendstree的平衡用户,WITH似乎是多余的。尽管仍然不确定是否有办法删除整个用户匹配项。我认为,即使按照Michael的建议拆分查询,也意味着需要进行完整的用户匹配,以找到没有任何朋友的余额用户
MATCH (u:User) 
WITH u 
MATCH (u:User) 
OPTIONAL MATCH (u)-[:FRIENDS_WITH]-(f:User) 
WITH u, count(f) AS friendCount 
WHERE friendCount < u.friend_limit 
RETURN u, friendCount