【发布时间】:2022-01-02 04:12:31
【问题描述】:
您好,下面是在 Neo4j GraphQL 的上下文中(所以我需要确保我在这里返回节点,而不是 Maps 或任何东西,我认为)。
我有节点Users 和Posts,用户可以在其中撰写或转发帖子。基本上帖子有created_date 字段,但是当用户“转发”该帖子时,我想知道该转发的时间。
典型的关系如下所示:
(u:User)-[r:WROTE]->(post:Post)
帖子创建日期字段的位置。当用户重新发布它时,基础帖子不会更改,他们只是向该帖子添加一个 REPOSTED 关系。像这样:
(u:User)-[r:REPOSTED]->(post2:Post)
当我想查看用户的帖子时,我想抓取他们撰写或转发的任何内容,并按照 post.created_date 的顺序(如果他们WROTE 帖子或REPOSTED 时间)进行排序如果他们转发了。
我不知道我应该在这里做什么,所以我尝试了这样的事情,但它没有及时编辑 repost_date(它没有返回正确的结果)。
MATCH (u:User)-[r:WROTE|REPOSTED]->(post:Post)
WITH (CASE WHEN r.created_date IS NOT NULL THEN r.created_date ELSE post.date END) as repost_date, post
SET post.repost_date = repost_date
RETURN post, repost_date
ORDER BY repost_date DESC
LIMIT 10
是否有另一种方法来获取并返回两个日期(当两者都存在时,即它是一个 REPOST)?
提前谢谢你!
【问题讨论】:
-
我不确定您在此处描述的数据结构是否完全有意义。如果许多用户重新发布帖子会发生什么?这些日期将存储在哪里?
-
每个用户都将与该帖子建立关系,该关系将具有属性,例如上面示例的 r.created_date。
-
你想只包含转发还是包含没有转发的帖子
-
两者都是@TomažBratanič!基本上任何时候都有帖子或转发,但是当它是转发时,我想返回 repost_date。