为我的图表尝试单个 Neo4j Cypher 查询
Trying a single Neo4j Cypher query for my graph
我有 "users" 拥有 "items",用户也是彼此的朋友。我正在尝试构建一个密码查询,以 return 我拥有的所有物品加上我朋友在单个查询中拥有的物品。我可以单独完成它们,但无法弄清楚如何在单个查询中完成。
关系:
(u:user)-[:OWNS]-(i:items)
(u:user)-[:FRIEND]-(f:user)
假设我的数据库中只有两个用户和 100 个项目。在 100 人中,第一个人拥有 (1-5) 5 件物品,第二个人拥有另外 5 件物品 (6-10)。这两个用户也是朋友。
如果我这样做,我会得到 5 件物品:
MATCH (uer1)-[:OWNS]->(i:items) return i
如果我这样做,我会得到另外 5 件物品:
MATCH (uer1)-[:FRIEND]->(f)-[:OWNS]->(i:items) return i
但我需要为给定的用户 (user1) 将它们组合起来,这样我就可以 return 一次拍摄所有 10 个项目。怎么做?
您有两个(或更多选项)
联盟
MATCH (user:User {name:"Raja"})-[:OWNS]->(i:Item) return i
UNION
MATCH (user:User {name:"Raja"})-[:FRIEND]->(f)-[:OWNS]->(i:Item) return i
可变长度路径
MATCH (user:User {name:"Raja"})-[:FRIEND*0..1]->(f)-[:OWNS]->(i:Item) return i
在这种情况下,我们查看距离为 0(用户本身)到 1(一级朋友)的朋友
第一个选项可能更快
第二种更通用。
我有 "users" 拥有 "items",用户也是彼此的朋友。我正在尝试构建一个密码查询,以 return 我拥有的所有物品加上我朋友在单个查询中拥有的物品。我可以单独完成它们,但无法弄清楚如何在单个查询中完成。
关系:
(u:user)-[:OWNS]-(i:items)
(u:user)-[:FRIEND]-(f:user)
假设我的数据库中只有两个用户和 100 个项目。在 100 人中,第一个人拥有 (1-5) 5 件物品,第二个人拥有另外 5 件物品 (6-10)。这两个用户也是朋友。
如果我这样做,我会得到 5 件物品:
MATCH (uer1)-[:OWNS]->(i:items) return i
如果我这样做,我会得到另外 5 件物品:
MATCH (uer1)-[:FRIEND]->(f)-[:OWNS]->(i:items) return i
但我需要为给定的用户 (user1) 将它们组合起来,这样我就可以 return 一次拍摄所有 10 个项目。怎么做?
您有两个(或更多选项)
联盟
MATCH (user:User {name:"Raja"})-[:OWNS]->(i:Item) return i
UNION
MATCH (user:User {name:"Raja"})-[:FRIEND]->(f)-[:OWNS]->(i:Item) return i
可变长度路径
MATCH (user:User {name:"Raja"})-[:FRIEND*0..1]->(f)-[:OWNS]->(i:Item) return i
在这种情况下,我们查看距离为 0(用户本身)到 1(一级朋友)的朋友
第一个选项可能更快 第二种更通用。