【问题标题】:Neo4j Cypher query for many to many relationshipNeo4j Cypher 查询多对多关系
【发布时间】:2017-07-29 18:01:50
【问题描述】:

我的图表如下所示:

Brand--SOLD_BY-->Store

某个商品的一个品牌可以在多个商店销售。同样,一家商店可以销售多个品牌的商品。

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

例如:

Brand1 由 StoreA、StoreB、StoreC 销售。结果应该类似于..

商店A - 品牌 1、品牌 2

StoreB - 品牌 1、品牌 3

StoreC - 品牌 1

我已经找到了商店,但找不到商店出售的其他品牌。

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

我想到的一件事是,如果我应该在收集的商店中循环并找到品牌,但我不知道这样做的效率有多高,因为图表可以有很多节点。

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

【问题讨论】:

    标签: neo4j cypher graph-databases


    【解决方案1】:

    你可以试试这个查询:

    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/

    干杯

    【讨论】:

    • 哎呀,我认为您的意思是使用 b 而不是 s 来填充您的模式理解。
    • 感谢您的帮助!它就像一个魅力。我想问一个简单的问题 - 如果我说超过 10000 个节点,这个查询的效率会有多高?我假设模式理解在每个节点上循环,所以我想知道这是否会使大量节点的过程变慢。再次感谢。
    • 如果您对:Brand(id) 有唯一约束,则执行时间将仅取决于BrandStore 之间的rels 密度。
    猜你喜欢
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多