尝试对我的图形执行一个Neo4j密码查询

尝试对我的图形执行一个Neo4j密码查询,neo4j,cypher,Neo4j,Cypher,我有拥有“物品”的“用户”,用户也是彼此的朋友。我试图构造一个密码查询,在一个查询中返回我拥有的所有项目以及我的朋友拥有的项目。我可以单独完成它们,但无法在一个查询中找到如何完成 关系: (u:user)-[:OWNS]-(i:items) (u:user)-[:FRIEND]-(f:user) 假设我的数据库中只有两个用户和100个条目。在100件物品中,第一人拥有(1-5)5件物品,第二人拥有另外5件物品(6-10)。这两个用户也是朋友 如果我这样做,我会得到5件物品: MATCH (ue

我有拥有“物品”的“用户”,用户也是彼此的朋友。我试图构造一个密码查询,在一个查询中返回我拥有的所有项目以及我的朋友拥有的项目。我可以单独完成它们,但无法在一个查询中找到如何完成

关系:

(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)将它们结合起来,这样我就可以在一次快照中返回所有10个项目。如何做到这一点?

您有两个(或更多选项)

联合 可变长度路径 在本例中,我们查看距离为0(用户本身)到1(一级朋友)的朋友

第一种选择可能更快
第二种更通用。

感谢您的快速响应!两个答案都很好!2.2浏览器不再显示所花费的时间,所以不确定哪一个更快。
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