如何使用Cypher返回属于Neo4j中指定帖子的评论?

时间:2014-03-17 04:19:44

标签: neo4j cypher

据我所知,在图形数据库中,如果已经创建了它,则不必创建另一个相同的节点。所以我有这样的帖子:

U.username  P.post
rio         hello
rio         hello

正如我之前所说的那样,您不必创建另一个相同的节点,因此上面的两个帖子都将存储在一个节点中。每个节点都可以有一些注释。例如,我对hello的第一篇帖子发表评论test,如下所示:

U.username  P.post  C.comment
rio         hello   test
rio         hello

我有像这样的密码查询语言来返回属于第一篇文章的评论:

MATCH (U:User)-[G:Give]->(C:Comment)<-[H:Has]-(P:Post)<-[S:Shout]-(FU:User)
WHERE P.post_id={post_id} AND FU.user_id={poster_user_id}
RETURN U.username,C.comment

如果我使用上面的密码,第一个帖子hello和第二个帖子都会返回相同的评论,但它应该是第一个帖子hello只应返回评论,而第二个应该没有不会返回属于第一篇帖子hello的评论。

我的问题是如何返回属于指定帖子的评论(在这种情况下是第一篇帖子hello)?

播放帮助。如果你有其他好的密码模型,请告诉我。 感谢。

2 个答案:

答案 0 :(得分:1)

我不确定我是否了解您的数据模型,但如果您有一个用户节点和每个帖子的节点(即使帖子具有相同的文本),您的查询也应该有效。您只会收到有评论的帖子。

答案 1 :(得分:1)

您的数据模型似乎很奇怪。或者我可能不理解它。

我关于如何建模博客引擎的初步思考过程如下 -

节点类型(标签) 您需要至少有3种类型的节点。

  1. 用户 - 这可以保留系统中的用户
  2. 发布 - 这些将是包含文本的实际博客文章
  3. 评论 - 这些将包含用户提出的任何评论
  4. <强>关系 以下是这些节点的连接方式..

    • A(用户)连接到(Post)so-(用户) - [:AUTHOR] - (POST)
    • A(Post)连接到(评论)so-(Post) - [:HAS_COMMENT] - (评论)
    • A(评论)连接到(用户),所以 - (评论) - [:MADE_BY] - (用户)

    对于简单的博客引擎来说,这应该足够了。

    注意:博客文章的每个评论都是一个单独的节点(我不确定是否有任何其他方法,因为在节点的属性部分中保留迭代密钥变得困难) 。如果多个评论连接到单个节点,那么您可以自动假设它们是该博客帖子的评论。