【发布时间】:2016-06-14 07:41:02
【问题描述】:
我是 Cypher 的新手,我正在努力学习如何正确导航图表。 我有这样的情况:2个用户关联了相同的服务,该服务可通过帐户访问。因此,用户 'usr01' 可以使用帐户 'acct01' 访问服务 'srv01';用户“usr02”可以使用帐户“acct02”访问服务“srv01”。 目的是提取 2 条这样的记录:
usr01 - srv01 - acct01
usr02 - srv01 - acct02
所以,我执行了这些查询:
-
节点的创建:
create (s:XService {serviceId:'srv01'}) return s; create (u:XUser {userId:'usr01'}) return u; create (u:XUser {userId:'usr02'}) return u; create (u:XAccount {accountId:'acct01'}) return u; create (u:XAccount {accountId:'acct02'}) return u; -
建立关系:
MATCH (u:XUser{userId:'usr01'}), (s:XService {serviceId:'srv01'}), (a:XAccount {accountId:'acct01'}) CREATE (u)-[:HAS_SERVICE]->(s)-[:HAS_ACCOUNT]->(a) MATCH (u:XUser{userId:'usr02'}), (s:XService {serviceId:'srv01'}), (a:XAccount {accountId:'acct02'}) CREATE (u)-[:HAS_SERVICE]->(s)-[:HAS_ACCOUNT]->(a)
我收到的图表结果是this
如果我执行这个查询 - 从用户 usr01 开始:
MATCH (u:XUser {userId: 'usr01'}) OPTIONAL MATCH (u)-[:HAS_SERVICE]->(s:XService) OPTIONAL MATCH (s)-[:HAS_ACCOUNT]->(a:XAccount)
返回 u.userId、s.serviceId、a.accountId;
我得到this结果:
那么,我怎样才能获得上述结果(usr01 - srv01 - acct01)而不是我收到的笛卡尔积? 提前致谢
【问题讨论】:
标签: graph neo4j navigation relationship