我们假设这个(:Store)<-[:FROM]-(:Notification)-[:FOR]->(//users//:User)
数据结构。
:Notification
例如,应该用作商店新销售的用户通知 这样的通知可以同时发送给大量用户,在这种情况下,我可以看到这种数据建模的两种方法:
:User
创建具有关系的单独:Store
;全部连接到单个:Notification
节点。因此,当收到通知时 - 关系和:Notification
节点被删除。[:FOR]
节点和针对不同用户创建多个:FOR
的方法。已收到通知 - :FOR
已删除此用户,如果没有:Notification
已删除,则int Base<>::cnt = 42;
本身已被删除。所以我的问题是:
假设第二个是更好的做法,我是否正确?
在删除关系之后,我通常如何检查是否存在更多此类关系,并且在不使Neo4j匹配此类型的所有连接关系的情况下进行,即检查是否至少存在这种类型的关系?
答案 0 :(得分:1)
一般来说,首先创建的对象越少,效率就越高。这将导致 2n 更少的对象(每个用户1个节点和关系)。例外情况是,如果每个通知有这么多用户,那么节点密度太高。为避免这种情况,您可以在特定用户阈值处创建其他通知。
以下查询改编自@Luanne对此question的回答,我觉得这很简单。
它假定除了User
个节点之外,Notification
节点的唯一其他连接是存储节点。如果连接到Notification
节点的节点的程度为1,那么它必须只剩下Store
个节点。删除与Store
节点的关系,然后删除然后删除Notification
节点。
MATCH (n:Notification {name: 'Notification One'} )-[store_rel:FROM]->(s:Store)
WHERE size((n)--())=1
DELETE store_rel, n