鉴于此查询:
match (store)-->(food1)-[:LIKE*]-(food2)<--(store)
return food1 + collect(distinct food2) as group
我得到这样的结果:
group
[orange, apple, banana],
[orange, banana, apple],
[apple, orange, banana],
[apple, banana, orange],
[banana, orange, apple],
[banana, apple, orange],
[melon, watermelon],
[watermelon, melon]
我预计只有2组而不是8组 . 我怎样才能获得不同的组?
1 回答
与Cypher的列表相等包括顺序,因此最简单的方法是对列表进行排序,最好使用APOC过程中的
apoc.coll.sortNodes()
,这允许在集合中进行排序,这将允许DISTINCT提供正确的结果 .也就是说,该查询存在一些问题需要解决 .
首先,您应该使用标签,否则将变为AllNodesScan . :存储和:应该使用食品标签 . 关系通常也很重要,因此如果可能,请在查询中使用关系类型 .
您还可以通过使用下限为0的可变长度关系来减少所涉及的变量数 .
此外,为了防止大量重复,因为您似乎不关心查询结果中的商店,最好只在MATCH中有一个商店,订购和收集食品,然后获取计数的列表列表的大小> 1(意味着多个商店与那些相同的食物有关系) .