bounty还有3天到期。此问题的答案有资格获得+50声望奖励。Lucassith正在寻找一个答案从一个有信誉的来源。
我有一长串的关系:
:User can have multiple :Territory(ies)
:Account can belong in multiple :Territory(ies)
:Account can be assigned to a multiple :User(s)
:Account can have an :Invoice(s)
:Invoice can have an :InvoiceEntry(ies)
总而言之:
:User-[:BELONGS_TO]->:Territory<-[:EXISTS_IN]-:Account-[:ISSUED]->:Invoice-[:HAS]->:InvoiceEntry
我可以把关系简化为
:User-[:CAN_SEE]->:Invoice
由于我不精通Cypher,我的问题是:
问题1。
当从:Territory中删除:Account并保持有效关系:CAN_SEE不变时,将使用什么查询来刷新:User和:Invoice之间的关系。
问题#2。
与上述相同,但是:用户已从“Territory”中删除,并且无法再查看“Invoice”。
更新16.06.23
我的主要关系链是:User -> :Territory <- :Account -> :Invoice
。:User -> :Territory
关系由Active Directory提供。:Account -> :Territory
和:Account -> Invoice
关系从ERP系统中提取。
为了避免昂贵的计算,因为单个:User
可以有数百个:Territory
,一个:Account
可以有数百个:Territory
,我想引入一个“快捷”关系:User-[:CAN_SEE]->:Invoice
。
示例案例:U1
属于T1
,T2
,T3
。A1
存在于T1
、T4
中。A2
存在于T3
,T4
中。A3
存在于T1
、T2
、T4
中。A1
发布I1
。A2
发布I2
。A3
已发布I3
。
在这里,我最终将其简化为:U1
可以看到I1
、I2
、I3
。
问题1的跟进:
我收到ERP从T1
分离A1
和A3
的有效负载。
我删除了A1->T1
,A3->T1
关系。
我需要重新计算[:CAN_SEE]
,因为U1丢失[:CAN_SEE]
到I1
,因为U1
到A1
不再具有有效的地域关系。U1
仍然可以看到I3
,因为A3
丢失了T1
,但T2
确保了到I3
的链。
查询将是什么样子?
问题2的跟进:
Active Directory已更新:U1
与T1
分离。U1
不再能够看到I1
。
在这种情况下查询看起来会是什么样子。
换句话说:
我知道如何在现有关系的基础上建立新的关系。我很难理解如何重新无效旧的,并删除那些如果不再有效。
2条答案
按热度按时间kpbwa7wx1#
如果我答对了问题
1.使用此查询创建:CAN_SEE关系
match(u:User)-->(:Territory)<--(:Account)-->(i:Invoice)merge(u)-[:CAN_SEE]->(i)
合并应防止产生多重关系
1.& 3.如果我没记错,在这两种情况下,您都想检查从用户到发票的路径是否仍然存在,如果路径被破坏,则删除CAN_SEE关系。下面的查询应该可以做到这一点
匹配(u:User)-[r:CAN_SEE]-(i:发票),其中不存在((u)-->(:Territory)<--(:Account)-->(i))删除r
在生产应用之前做测试,但我没有测试
krugob8w2#
我假设您的问题是更新一个已经包含适当的
CAN_SEE
关系的图。1.使用以下查询在删除特定帐户(例如
A1
)时更新图表。查询使用DETACH DELETE删除所有已删除节点的匹配路径和所有关系(包括BELONGS_TO
和CAN_SEE
)。1.使用此查询可以断开用户(
U1
)与地区(T3
)的连接,并删除该用户与该地区中所有帐户开具的所有发票之间的所有CAN_SEE
关系: