首页 > 解决方案 > 需要查找组内共享的所有文件并直接向用户 neo4j Cypher 查询

问题描述

我需要找到直接与用户共享或通过其他人创建的组共享的所有文件。

我尝试了以下查询,它给出了结果,但是,如果没有文件直接与用户或通过组共享,那么我会看到三个没有关系的节点。

有可能同一个文件直接共享给用户和组,并且用户也是该组的一部分。在这种情况下,我需要一个直接与用户而不是组共享的文件。

图表

我还附上了我们数据库的转储

https://wetransfer.com/downloads/6cc18b36e9f682aeeed8244d8b36719520200102081814/57ac4525bca19391b7e737547f93bc3d20200102081814/c9d04e

match (u:user) where u.ohrid = "120"
match (f:file)
optional match (u)-[mg:MEMBER_OF_GROUP|CREATED_GROUP]->(g:group)<-[fswg:FILE_SHARED_WITH_GROUP]-(f)
optional match (f)-[fsw:FILE_SHARED_WITH]->(u)
return u, mg,fswg, g, fsw, f

需要帮忙 ...

标签: neo4jcypher

解决方案


这样的事情可能对你有用:

MATCH (u:user) WHERE u.ohrid = "120"
OPTIONAL MATCH p1 = (f1:file)-[:FILE_SHARED_WITH]->(u)
WITH u, COLLECT(DISTINCT f1) AS f1s, COLLECT(p1) AS p1s
OPTIONAL MATCH p2 = (u)-[:MEMBER_OF_GROUP|CREATED_GROUP]->(:group)<-[:FILE_SHARED_WITH_GROUP]-(f2:file)
WHERE NOT f2 IN f1s
RETURN u, f1s, p1s, COLLECT(DISTINCT f2) AS f2s, COLLECT(p2) AS p2s

此查询首先查找并收集f1s与 直接共享的所有文件 ( )user以及这些文件的路径 ( p1s)。然后它收集f2s与用户关联的组共享的所有文件()(忽略已经存在的文件f1s),以及这些文件的路径(p2s),并返回user和 4 个集合。


推荐阅读