图模型:如何将Neo4J中的项目标记为已读/已查看

时间:2014-11-07 07:37:58

标签: neo4j cypher

[EDITED]

我正在尝试构建一个允许用户接收消息的应用程序。该模型看起来像这样:

(user:Person)-[:HAS_MESSAGE]->(message:Message)

多个用户可以拥有相同的消息。

我尝试使用以下查询在UI上显示此内容:

MATCH (user:Person)-[:HAS_MESSAGE]->(message:Message) WHERE user.EmployeeId = 'XYZ123' RETURN message

但在用户界面上,我想表明他们尚未看到的消息。

在Neo4J中对此进行建模的最佳方法是什么?我应该使用标签还是财产?另外,如何在同一查询中更新其读取状态?

此致 基兰

1 个答案:

答案 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)

不幸的是,您无法在关系上设置索引。