【问题标题】:Neo4j Cypher query to fetch posts created by followersNeo4j Cypher 查询以获取关注者创建的帖子
【发布时间】:2020-12-10 09:37:46
【问题描述】:

我正在创建一个类似于 Facebook 的应用程序。这是一个人们可以共享产品和产品集合的应用程序。在“创建帖子”弹出窗口中,人们可以选择产品或集合(产品组但将其视为单个对象)或仅文本来创建帖子。我需要获取我的关注者创建的帖子。

每个帖子都有一个 PRODUCT、COLLECTION 或 TEXT 类型的属性来指示它是什么类型的帖子。

在我的 neo4j 数据库中,有一个 Post 对象、product 对象、collection 对象和 user 对象。 当您创建帖子时,它们之间将创建关系。

(post)-[:CREATED_BY]->(USER)
(post{type:"PRODUCT"})-[:INCLUDES]->(product)
(post{type:"COLLECTION})-[:INCLUDES]->(collection)

这是我试图获取“产品”类型的帖子。 IT 显示错误。只是为了给出我们属性的基本概念。


   MATCH (user:User{lastName: "mylastname"})-[:FOLLOWS {status: "accepted"}]->(following) WITH following 
   OPTIONAL MATCH (post:Post {type: "PRODUCT"})-[r:CREATED_BY]->(following) WITH post,user, r OPTIONAL 
   MATCH 
   (post)-[:INCLUDES]->(product:Product) WITH COLLECT({post:post, datetime: r.datetime, 
   type:"PRODUCT",product:product user: following}) as productPosts
   UNWIND productPosts AS row
   RETURN row
   ORDER BY row.datetime DESC
   SKIP 0
   LIMIT 10

【问题讨论】:

  • 您看到的错误是什么?集合是如何定义的?在您的图表中,您是否有与多个产品相关的集合?

标签: neo4j cypher


【解决方案1】:

您的WITH 子句没有指定需要转移到查询剩余部分的所有变量。此外,至少有一个错字(缺少逗号)。

事实上,您的查询甚至不需要任何WITH 子句。也不需要COLLECT一个列表,只需立即UNWIND它。

这个查询应该会更好:

MATCH (user:User{lastName: "mylastname"})-[:FOLLOWS {status: "accepted"}]->(following)
OPTIONAL MATCH (post:Post {type: "PRODUCT"})-[r:CREATED_BY]->(following)
OPTIONAL MATCH (post)-[:INCLUDES]->(product:Product)
RETURN {post:post, datetime: r.datetime, type:"PRODUCT", product:product, user: following} AS row
ORDER BY row.datetime DESC
LIMIT 10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-23
    • 2015-11-08
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多