neo4j - 两个独立查询neo4j的结果之间的差异
问题描述
我有 2 个返回 2 组用户的子查询(每个查询返回一组用户)
第一个查询:
MATCH (:User {user_id: "69b3315a-ba4a-4021-94e1-0f494f9b957f"})-->(first_set_of_users)
RETURN first_set_of_users
第二个查询:
MATCH (:User {user_id: "69b3315a-ba4a-4021-94e1-0f494f9b957f"})<-[:LIKES]-(likers)-[:LIKES]->(v)
WITH DISTINCT v
MATCH (second_set_of_users)-[:LIKES]->(v)
RETURN second_set_of_users, COUNT(*) AS recoWeight
ORDER BY recoWeight DESC
我最终想要返回的是所有用户从second_set_of_users
减去一个first_set_of_users
和ORDER BY recoWeight DESC
我怎样才能在一个查询中做到这一点?我尝试的一切都导致了查询的笛卡尔积,并且每次独立查询都需要不到一秒钟的时间。
解决方案
MATCH (:User {user_id: "69b3315a-ba4a-4021-94e1-0f494f9b957f"})-->(first_set_of_users)
WITH collect(first_set_of_users) AS list_of_first_set_of_users
MATCH (:User {user_id: "69b3315a-ba4a-4021-94e1-0f494f9b957f"})<-[:LIKES]-(likers)-[:LIKES]->(v)
WITH DISTINCT v, list_of_first_set_of_users
MATCH (second_set_of_users)-[:LIKES]->(v)
WITH second_set_of_users, COUNT(*) AS recoWeight
WHERE NOT second_set_of_users IN list_of_first_set_of_users
RETURN second_set_of_users, recoWeight
ORDER BY recoWeight DESC
解释。使用WITH
子句我们可以将第一个查询的结果传递给第二个查询。然后使用WHERE NOT IN
我们可以过滤第二个查询的结果。
推荐阅读
- javascript - 尝试在我的基本待办事项列表应用程序中设置表单验证
- python - 相当于 Python 中的 .presence
- .net - 对象引用未设置为对象 FiftyOne.Foundation.PreApplicationStart.Start() 的实例
- powershell - PowerShell Out-GridView 未显示所有输出
- python - 如何将用户限制在某些特定的 url
- mayavi - Python3.0 Mayavi旋转立方体字形
- sapui5 - SAPUI5 为什么全局 BusyIndicator 隐藏得太早?
- javascript - 函数内部的笑话模拟函数
- r - 无需注册即可在 R 中获取 gsheet 的最后更新时间
- 3d - 如何将相机发送到默认铯