2014-05-20 95 views
1

我想從一組用戶中獲取每個用戶的第一篇文章。neo4j密碼查詢獲取每個用戶的第一篇文章

(想象節點1,2,3 4是用戶節點)

該查詢返回的所有用戶之間的單最早柱:

START user=node(1, 2, 3, 4) 
MATCH user <-[:creator]- post 
WITH user, min(post.createdAt) as earliest 
MATCH user <-[:creator]- post 
WHERE post.createdAt = earliest 
RETURN post 

什麼查詢將返回的最早/第一交每個用戶?

回答

1

我相信這應該給你你想要的東西(爲最早的帖子每個用戶):

START user=node(1, 2, 3, 4) 
MATCH user <-[:creator]- post 
WITH user, min(post.createdAt) as earliest 

MATCH (user2) <-[:creator]- (post2 {createdAt : earliest}) 
WHERE ID(user2) = ID(user) 

RETURN user2,post 

您的查詢的第一部分出現正確的,但在你的第二場比賽中聲明你要找的人任何(用戶)< - [:creator] - (發佈)帖子創建時間最早的地方。當你指出這隻會返回一個(可能)條目。

爲了獲得每個用戶最早的帖子,第二個MATCH需要以某種方式明確指定每個用戶。我的示例使用WHERE ID(user2)= ID(user),但至少有一種其他方式可能更可取。如果你有一個獨特的用戶屬性,那麼你可以在我的例子中指定屬性值,就像(post2 {createdAt:最早})。例如,您可以執行類似(user2 {username:user.username})。請注意,在我的所有示例中,如果沒有其他內容(我不清楚它是否可以使用相同的變量名稱),則還應該在第二個MATCH語句中使用另一個變量名稱來消除歧義,但如果它們'重新相同)。

另外,我假設你shorthanding查詢,你可能會使用標籤,所以查詢會是這個樣子:

START user=node(1, 2, 3, 4) 
MATCH (user:USER) <-[:creator]- (post:POST) 
WITH user, min(post.createdAt) as earliest 

MATCH (user2:USER) <-[:creator]- (post2:POST {createdAt : earliest}) 
WHERE ID(user2) = ID(user) 

RETURN user2,post 

我希望這是明確的,隨意澄清如果不是。

相關問題