鉴于这些数据,我想密码查询neo4j数据库,查找那些X是他们自己的friend_limit
属性的X朋友少的用户。我尝试过多次COUNT
次查询,但未能获得一致的结果。
例如,在这种情况下,我希望收到除Joe以外的所有用户的结果集(2个朋友中的2个)和Ella(1个中的1个)。
CREATE
(Joe:User { name:'Joe', friend_limit:2 }),
(James:User {name: 'James', friend_limit:2}),
(Jack:User {name: 'Jack', friend_limit:2}),
(Jane:User {name: 'Jane', friend_limit:2}),
(Ella:User {name: 'Ella', friend_limit:1}),
(Ann:User {name: 'Ann', friend_limit:2}),
(Joe)-[:FRIENDS_WITH]->(Ella),
(Joe)-[:FRIENDS_WITH]->(James),
(James)-[:FRIENDS_WITH]->(Jack),
(Ella)-[:FRIENDS_WITH]->(Jane)
http://console.neo4j.org/r/gbnw5s
编辑:我已经到了这个但是我找不到在结果集中包含Ann的方法,她可能因为没有任何FRIENDS_WITH
关系而失踪,因此失败{ {1}}部分?
MATCH
答案 0 :(得分:3)
MATCH (u:User)
WITH u
OPTIONAL MATCH (u:User)-[:FRIENDS_WITH]-(f:User)
WITH u, count(f) AS friendCount
WHERE friendCount < u.friend_limit
RETURN u, friendCount
有效(使用可选匹配来获得Ann)。虽然我必须首先使用
进行匹配MATCH (u:User)
WITH u
不确定是否有更好的方法
答案 1 :(得分:1)
我会以类似于@Luanne的方式来做,只是更简洁一点:
MATCH (u:User)
OPTIONAL MATCH (u)-[:FRIENDS_WITH]-(f:User)
WITH u, count(f) AS friendCount
WHERE friendCount < u.friend_limit
RETURN u, friendCount
我已经离开了f:User
,因为我认为这会让它更有效率,特别是如果模型在以后更改,以便用户可以成为除用户之外的其他东西的朋友(但可能会有不管怎样,不同的关系类型。)