neo4j 密码分组
neo4j Cypher Grouping
我有一个推文节点数据库,每条推文都有一个 userId 字段,该字段具有基于推文是否被回复的关系。我正在尝试编写一个查询,在其中按用户对所有推文进行分组,同时保留推文关系以查看用户之间的关系。
到目前为止我有
匹配(n:Tweet)return 不同(n.userId),n
但这不起作用,因为没有保留关系。有人知道怎么做吗?
我不太确定你在问什么......你在谈论关系,但你没有任何匹配。
一般来说,当您在 RETURN
(或 WITH
) 子句 Neo4j 将自动按子句中的其他列分组。以下是您可能会做的事情的示例:
MATCH (source_tweet:Tweet {userId: 1234})<-[:RETWEET_OF]-(retweet:Tweet)
RETURN source_tweet:Tweet.id, source_tweet:Tweet.text, count(retweet)
这将为您提供用户 ID #1234 发布的每条推文以及每条推文的转推次数的计数。
添加另一个答案以回应您的评论。
因此,如果您想了解用户是否进行过对话,您可以这样做:
MATCH (source_tweet:Tweet)<-[:REPLY_TO]-(reply_tweet:Tweet)
MATCH
(source_user:User {userId: source_tweet.user}),
(reply_user:User {userId: reply_tweet.user})
CREATE UNIQUE reply_user-[:REPLIED_TO]->(source_user)
那么你可以这样做:
MATCH (user1)-[:REPLIED_TO]-(user2)
WHERE ID(user1) < ID(user2)
RETURN user1.userId, user2.user_id
...获得所有组合。
虽然就像我说的,你真的应该在推文和用户之间建立关系,表明是哪个用户发了推文。如果你有查询可能是这样的:
MATCH (source_user:User)-[:WROTE]->(source_tweet:Tweet)<-[:REPLY_TO]-(reply_tweet:Tweet)<-[:WROTE]-(reply_user:User)
CREATE reply_user-[:REPLIED_TO]->(source_user)
而且这也应该快得多,因为您是在进行关系遍历而不是在 userId
索引中查找。
我有一个推文节点数据库,每条推文都有一个 userId 字段,该字段具有基于推文是否被回复的关系。我正在尝试编写一个查询,在其中按用户对所有推文进行分组,同时保留推文关系以查看用户之间的关系。
到目前为止我有
匹配(n:Tweet)return 不同(n.userId),n
但这不起作用,因为没有保留关系。有人知道怎么做吗?
我不太确定你在问什么......你在谈论关系,但你没有任何匹配。
一般来说,当您在 RETURN
(或 WITH
) 子句 Neo4j 将自动按子句中的其他列分组。以下是您可能会做的事情的示例:
MATCH (source_tweet:Tweet {userId: 1234})<-[:RETWEET_OF]-(retweet:Tweet)
RETURN source_tweet:Tweet.id, source_tweet:Tweet.text, count(retweet)
这将为您提供用户 ID #1234 发布的每条推文以及每条推文的转推次数的计数。
添加另一个答案以回应您的评论。
因此,如果您想了解用户是否进行过对话,您可以这样做:
MATCH (source_tweet:Tweet)<-[:REPLY_TO]-(reply_tweet:Tweet)
MATCH
(source_user:User {userId: source_tweet.user}),
(reply_user:User {userId: reply_tweet.user})
CREATE UNIQUE reply_user-[:REPLIED_TO]->(source_user)
那么你可以这样做:
MATCH (user1)-[:REPLIED_TO]-(user2)
WHERE ID(user1) < ID(user2)
RETURN user1.userId, user2.user_id
...获得所有组合。
虽然就像我说的,你真的应该在推文和用户之间建立关系,表明是哪个用户发了推文。如果你有查询可能是这样的:
MATCH (source_user:User)-[:WROTE]->(source_tweet:Tweet)<-[:REPLY_TO]-(reply_tweet:Tweet)<-[:WROTE]-(reply_user:User)
CREATE reply_user-[:REPLIED_TO]->(source_user)
而且这也应该快得多,因为您是在进行关系遍历而不是在 userId
索引中查找。