neo4j - 需要查找组内共享的所有文件并直接向用户 neo4j Cypher 查询
问题描述
我需要找到直接与用户共享或通过其他人创建的组共享的所有文件。
我尝试了以下查询,它给出了结果,但是,如果没有文件直接与用户或通过组共享,那么我会看到三个没有关系的节点。
有可能同一个文件直接共享给用户和组,并且用户也是该组的一部分。在这种情况下,我需要一个直接与用户而不是组共享的文件。
我还附上了我们数据库的转储
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
需要帮忙 ...
解决方案
这样的事情可能对你有用:
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 个集合。
推荐阅读
- jestjs - 测试报告为慢的开玩笑阈值
- python - 背景图像不显示在 Tkinter 程序上?
- postgresql - 如何从列中将当前日期附加到 AM/PM 时间并以 YYY-MM-DD HH:MM:SS.000 格式显示为 postgresql 中的时间
- jquery - 比较未排序的数组jquery并获取索引
- insert - 如何使用boto3将嵌套字典插入dynamodb?
- apache - Apache 使用 SetEnvIfExpr 允许 IP 范围
- python - 从交互 Selenium Python 中获取标题
- r - 某个方向内另一个数据集的最近点
- code-generation - 什么是代码/文本生成的好工具?
- python - 如何使用python将字符串标记为IOB注释?