neo4j - 如何在neo4j中仅限制特定节点?

标签 neo4j cypher

我正在创建一个类似社交媒体的平台,它有一个家庭供稿。主页提要包含可以有任意数量的评论和喜欢的帖子。评论也可以有任意数量的赞。

当用户第一次加载主页提要时,我只想首先获取一定数量的帖子(10 个)。我目前正在运行的查询如下:

MATCH (p:Post)<-[:POSTED]-(u1:User), (u2: User {id: {id}})
WHERE u1.id = {id} OR (u1)-[:FRIENDS_WITH]-(u2)  
OPTIONAL MATCH (u4:User)-[:LIKES]->(p)
OPTIONAL MATCH (u3:User)-[:COMMENTED]->(c:Comment)<-[:HAS_COMMENT]-(p)
OPTIONAL MATCH (u5:User)-[:LIKES]->(c)
RETURN p, u1, u3, c, u4, u5 ORDER BY p.timestamp DESC LIMIT 10

这里的问题是它只会获取 10 个结果,不一定是 10 个帖子。我想要一种方法来专门收集 10 个帖子,然后获取每个帖子的所有评论/喜欢/评论喜欢。这可以在单个查询中实现吗?

最佳答案

这可能会做你想要的:

MATCH (p:Post)<-[:POSTED]-(u1:User), (u2: User {id: {id}})
WHERE u1.id = {id} OR (u1)-[:FRIENDS_WITH]-(u2)
WITH p, u1
ORDER BY p.timestamp DESC
LIMIT 10
OPTIONAL MATCH (u4:User)-[:LIKES]->(p)
OPTIONAL MATCH (u3:User)-[:COMMENTED]->(c:Comment)<-[:HAS_COMMENT]-(p)
OPTIONAL MATCH (u5:User)-[:LIKES]->(c)
RETURN p, u1, u3, c, u4, u5;

它确保挑选的 10 个帖子是最新的。

它做出了合理的假设,每个 Post恰好由 1 个用户发布(因此 WITH 子句可以简单地为 WITH p, u1 而不是类似 WITH p, COLLECT(u1) 的内容)。

关于neo4j - 如何在neo4j中仅限制特定节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43597682/

相关文章:

neo4j - 将 csv 数据导入 Neo4j 时出错,其中 header 包含空格

python - 批量插入 neo4j - 最佳选择?

neo4j - 如何创建自引用节点?

java - 检索每个文档 Neo4j Lucene 的分数,而不仅仅是顺序

neo4j - Neo4J CQL 中是否可以有 SQL Like 子句?

database - 使用 cypher 获得 neo4j 正常运行时间

java - NEO4j:搜索密码查询的优化

java - 快速执行多个 CREATE 语句的方法

neo4j - 使用 Neo4j 作为 Mahout 数据存储

php - Neo4j - 尽管使用合并但重复