neo4j - 返回不同的组
问题描述
鉴于此查询:
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 个。我怎样才能获得不同的组?
解决方案
与 Cypher 的列表相等性包括顺序,因此最简单的方法是对列表进行排序,最好使用apoc.coll.sortNodes()
APOC 程序,它允许在集合内排序,然后允许 DISTINCT 提供正确的结果。
也就是说,该查询存在一些问题需要修复。
首先,您应该使用标签,否则这会变成 AllNodesScan。:Store 和 :Food 标签可能应该被使用。关系通常也很重要,因此请尽可能在查询中使用关系类型。
您还可以通过使用下限为 0 的变长关系来减少涉及的变量数量。
此外,为了防止出现大量重复,因为您似乎并不关心查询结果中的商店,最好在 MATCH 中只有一个商店,订购和收集食物,然后获取计数的列表的列表> 1(意味着不止一家商店与这些相同的食物有关系)。
MATCH (s:Store)-[:CARRIES]->(:Food)-[:LIKE*0..]-(food:Food)
WITH s, food
ORDER BY id(food) DESC
WITH s, collect(food) as foods
WITH foods, count(foods) as count
WHERE count > 1
RETURN foods
推荐阅读
- opencl - OpenCL:为输入和输出创建缓冲区时如何指定数组的大小
- python - How to split a list of tuples based on the minimum value in each tuple?
- css - 如何正确迁移到具有相同按钮颜色和字体的 Bootstrap5?
- reactjs - Strapi 富文本内容未在网页上正确显示
- events - Quasar 框架 v-on:input 什么都不做
- google-visualization - 单击时控件(类别过滤器)未正确更新表格图表
- javascript - 反应类继承
- angular - “ng”命令只能通过管理员 cmd 执行
- constraints - 如何添加约束以使只有一个非整数值?
- java - GlassFish 5.1.0 错误,因为 dcs 为空