Neo4j Cypher-在可选地添加关系计数时加载结果
我正在使用一个图形数据库来建立文件夹、其子文件夹和用户(无论是文件夹的所有者还是共享者)之间的关系 这是我的结构的一个例子。其中橙色为文件夹,蓝色为用户。- 我希望查询实现的目标:它应该返回查询下文件夹的直接子文件夹,并在执行此操作时确定返回的子文件夹是否正在共享 我的查询Neo4j Cypher-在可选地添加关系计数时加载结果,neo4j,cypher,Neo4j,Cypher,我正在使用一个图形数据库来建立文件夹、其子文件夹和用户(无论是文件夹的所有者还是共享者)之间的关系 这是我的结构的一个例子。其中橙色为文件夹,蓝色为用户。- 我希望查询实现的目标:它应该返回查询下文件夹的直接子文件夹,并在执行此操作时确定返回的子文件夹是否正在共享 我的查询 MATCH (:Folder { name: 'Nick Hamill' })-[:CHILD]->(children:Folder) WITH children OPTIONAL MATCH path = (c
MATCH (:Folder { name: 'Nick Hamill' })-[:CHILD]->(children:Folder)
WITH children
OPTIONAL MATCH path = (children)<-[*]-(:User)
UNWIND RELATIONSHIPS(path) AS r WITH children, r
WHERE TYPE(r) = 'SHARES'
RETURN children AS model, COUNT(r) > 0 AS shared
查询应该是相对自解释的,但为了清楚起见,这里有一些预期输出-
| Query Folder | Returned Folder | Shared? |
|----------------------|------------------|---------|
| Miss Dessie Oritz II | Nick Hamill | TRUE |
| Nick Hamill | Dr Denis Abshire | TRUE |
| Samara Russell | Shemar Huels PhD | FALSE |
| Shemar Huels PhD | Hazle Ward | FALSE |
我正在运行neo4j 3.5.11社区版。我觉得这应该是一个相当简单的解决方案,我只是满足了我极其有限的密码知识的极限
谢谢你的帮助 我不了解您在查询中使用此选项的原因:
OPTIONAL MATCH path = (children)<-[*]-(:User)
UNWIND RELATIONSHIPS(path) AS r WITH children, r
WHERE TYPE(r) = 'SHARES'
您应该告诉我们您正在使用的语言版本,并在提供的示例中提供一些预期结果的示例database@Sterconium-谢谢,我添加了一个示例结果,versionI看到了,但是其他文件夹呢?它应该以什么回报,说“萨马拉·拉塞尔”?嗨,罗吉西玛,再次感谢你的帮助。我之所以增加了“展开”等的复杂性,是因为Nick Hamill与用户共享,而Denis Abshire博士是Nick Hamill的孩子,Denis Abshire博士应该标记为共享文件夹。但是,对于上面的查询,这不会遍历链并确定它是共享的。我不知道是否有其他方法可以做到这一点?我已经更新了我的回复。你能测试最后一个查询吗?再完美一次!我不知道您可以对关系节点使用
*0..
。非常感谢你!
OPTIONAL MATCH path = (children)<-[*]-(:User)
UNWIND RELATIONSHIPS(path) AS r WITH children, r
WHERE TYPE(r) = 'SHARES'
MATCH (:Folder { name: 'Nick Hamill' })-[:CHILD]->(children:Folder)
RETURN children AS model, size((children)<-[:CHILD*0..]-(:Folder)<-[:SHARES]-(:User)) > 0 AS shared