2017-07-29 45 views
1

我有一个类似如下的图表:Neo4j的暗号查询多对多的关系

Brand--SOLD_BY-->Store 

一个品牌在某一项目可以由多个店铺出售。同样,一家商店可以出售多个品牌的商品。

我想要实现的是找到所有销售特定品牌的商店,但随着商店的结果,我还想要其他品牌由该特定商店销售。

例如:

Brand1由StoreA,StoreB,StoreC销售。结果应该是这个样子..

StoreA - Brand1,Brand2

StoreB - Brand1,Brand3

StoreC - Brand1

我设法找到商店,但我不能够找到商店出售的其他品牌。

MATCH (b:Brand)-[s:SOLD_BY]->(s:Store) 
WHERE b.id=1 
WITH DISTINCT s AS stores 
RETURN stores 

有一件事我一直想的是,如果我要把收集储存在内部循环,并找到了品牌,但我不知道如何有效的,这将是自该图可以有多个节点。

任何帮助,将不胜感激,谢谢。

回答

0

你可以试试这个查询:

MATCH (:Brand {id:1})-[:SOLD_BY]->(s:Store) 
RETURN s, [ (b)-[:SOLD_BY]->(s) | b] AS brands 

看到这个链接有更多的信息:https://neo4j.com/blog/cypher-graphql-neo4j-3-1-preview/

干杯

+0

哎呦,我觉得你的意思是使用'B'来填充你的模式的理解而不是's'。 – InverseFalcon

+0

已完成更正。谢了哥们 ! – logisima

+0

感谢您的帮助!它像一个魅力。我想问一个简单的问题 - 如果我说有超过10000个节点,这个查询的效率会如何?我假设模式理解循环遍历每个节点,所以我想知道这是否会导致大量节点的进程变慢。再次感谢。 –