我一直试图根据节点查询获取子图。 只要子图中的所有节点都连接,查询就应该忽略关系方向: 例如: u1 -FRIEND-> u2 -FRIEND-> U3 u4 -FRIEND-> u5 -FRIEND-> U6
搜索u1或u2或u3,应该返回一组:[u1,u2,u3]
我使用了以下Cypher查询:
MATCH (a:User)-[:FRIEND_OF*0..]-(b)
WHERE a.userId = 'some_id'
WITH a, collect(DISTINCT b) AS sets
RETURN DISTINCT sets
问题在于,我得到了所有设置的排列,例如:
DATA: u1 -FRIEND-> u2 -FRIEND-> u3
RETURN: [u1,u2,u3],[u1,u3,u2],[u2,u1,u3]...
如何区分不同的集合才能返回一个排列?
我还想支持用户可以在不同子图中的情况,因此响应应该是几个子图。
感谢
答案 0 :(得分:1)
此查询应该有效:
MATCH p=(a:User)-[:FRIEND_OF*0..]-(b)
WHERE a.userId = 'some_id'
WITH DISTINCT a, b
ORDER BY ID(b)
WITH a, COLLECT(b) AS sets
RETURN DISTINCT sets;
它获得了不同的a
/ b
对,通过本机ID对b
个节点进行排序,将有序节点放入集合中,最后返回不同的集合。
您可能希望为:User(userId)
创建索引以获得更好的效果。