[EDITED]
我正在尝试构建一个允许用户接收消息的应用程序。该模型看起来像这样:
(user:Person)-[:HAS_MESSAGE]->(message:Message)
多个用户可以拥有相同的消息。
我尝试使用以下查询在UI上显示此内容:
MATCH (user:Person)-[:HAS_MESSAGE]->(message:Message) WHERE user.EmployeeId = 'XYZ123' RETURN message
但在用户界面上,我想表明他们尚未看到的消息。
在Neo4J中对此进行建模的最佳方法是什么?我应该使用标签还是财产?另外,如何在同一查询中更新其读取状态?
此致 基兰
答案 0 :(得分:2)
[EDITED]
这是一种方法。
创建新的Message
个节点时,请将false
分配给wasRead
关系中的HAS_MESSAGE
媒体资源。然后,当你想要获取未读消息时(同时将它们标记为已被阅读):
MATCH (user:Person)-[r:HAS_MESSAGE]->(message:Message)
WHERE user.EmployeeId = 'XYZ123' AND r.wasRead = false
SET r.wasRead = true
RETURN message
为了获得更好的性能,您应该考虑在Person / EmployeeId组合上创建索引,如下所示:
CREATE INDEX ON :Person(EmployeeId)
不幸的是,您无法在关系上设置索引。