database - neo4j 试图做 UNION 但我仍然看到超出范围的东西
问题描述
「喂!我有一个观看和喜欢电影的人的数据库。总共有 5 个人的朋友关系是这样的:a>b>c>d>e。我试图将他们观看和喜欢的所有电影从 a 人到 d 人。我让它与这个查询一起工作,但有很多重复:
MATCH(p:Person{name:'Joe'})-[:Friend*1..3]->(f)
MATCH(m:Movie)<-[:Watched]-(f)
MATCH(ml:Movie)<-[:Liked]-(f)
MATCH (mg:Movie)<-[:Watched]-(p)
MATCH (mgl:Movie)<-[:Liked]-(p)
RETURN m,ml,mg,mgl
我试图用 UNION 缩小范围,但我仍然看到只有一个人看过并喜欢的电影:
MATCH(p:Person{name:'Joe'})-[:Friend*..3]->(f)
MATCH(m:Movie)<-[:Watched]-(f)
RETURN m
UNION
MATCH(m:Movie)<-[:Liked]-(f)
RETURN m
UNION
MATCH (m:Movie)<-[:Watched]-(p)
RETURN m
UNION
MATCH (m:Movie)<-[:Liked]-(p)
RETURN m
我怎样才能删除它们?
解决方案
您需要: - 向左和向右扩展匹配模式 - 然后将电影放入列表中 - 展开它 - 并删除重复项
MATCH (mp:Movie)<-[:Watched|Liked]-(p:Person{name:'Joe'})
-[:Friend*1..3]->
(f:Person)-[:Watched|Liked]->(mf:Movie)
WITH collect(DISTINCT mp) + collect(DISTINCT mf) AS movies
UNWIND movies AS movie
RETURN DISTINCT movie
推荐阅读
- ios - iOS API 密钥:在发出 http 请求时,是否有一种实际安全的方法来保护您的 API 密钥?
- azure - 如何在 Azure Cloud 上使用普通文件缓存加入 Kafka KStream?
- map-projections - SpatialPixelsDataFrame 对象的投影
- .htaccess - 如何删除每个链接末尾出现的单词
- angularjs - 如何使用 ng-repeat 值设置多选下拉菜单的选择限制
- c - 为什么我的数字数组的平均值不正确?
- vb.net - 从 Informix vb.net 填充 datagridview 的特定列
- python - 无法构建 LibAdblockPlus
- react-native - 是否可以在 Windows 笔记本电脑中使用 React Native 构建 android 和 iOS 应用程序?
- java - jQuery 从页面获取值并将其传递给 HTTPServletRequest 供 java 使用