【问题标题】:How to retrieve nodes for multiple depth relationships Neo4j Database Cypher?如何检索多个深度关系的节点 Neo4j Database Cypher?
【发布时间】:2014-11-07 09:50:33
【问题描述】:

假设有一个简单的图如下,

(City {name:gotham})<-[:LOCATED]-(Tower {name:abc})<-[:LOCATED]-(Bank:{name:CityBank})
(City {name:gotham})<-[:LOCATED]-(Cinema {name:MainHall})
(City {name:gotham})<-[:LOCATED]-(Bank {name:ComBank})

如何在 Neo4j 数据库中获取位于 City 名为 Gotham 的所有银行(包括 CityBank 和 comBank)?我尝试了以下模式,它返回了位于 City 名为 gotham 的所有节点(包括电影院)

MATCH (City{name:'Gotham'})<--(Bank) RETURN Bank

【问题讨论】:

    标签: neo4j cypher graph-databases


    【解决方案1】:

    假设您只是输入错误的查询,什么不起作用?

    MATCH (:City{name:'Gotham'})<--(bank:Bank) RETURN bank
    

    应该可以正常工作。

    输入完全错误,应该读过(孤星表示,任何类型的所有关系,任何长度的路径):

    MATCH (:City{name:'Gotham'})<-[*]-(bank:Bank) RETURN bank
    

    更好的是:

    MATCH (:City{name:'Gotham'})<-[:LOCATED*1..2]-(bank:Bank) RETURN bank
    

    所以只能遍历LOCATED 关系。您可以调整*1..2(匹配长度为 1 到 2 的路径)以满足路径长度要求(例如,如果您添加了街道或街区节点,您可能希望匹配长度为 3 的路径*1..3

    【讨论】:

    • 第一个查询只返回 ComBank 而不是 CityBank 我检查过。第二个查询是我所期待的,我可以像这样 [LOCATED*] 使用它而无需指定深度
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多