2016-11-23 111 views
0

我的例子得到我的微博和我的朋友們的微博:Neo4j查詢:如何在標籤中構建多個標籤?

MATCH 
(me:User{user_id: "346"})-[:POSTS]->(t:Tweet), 
(me)-[:FOLLOWS]->(following:User)-[:POSTS]->(t1:Tweet) 
RETURN 
t, t1 
SKIP 10 LIMIT 10 

問:我該如何合併T和T1到結果集。基本上,我想建立json響應如下:

[ 
    { 
    "tweet_id": "504597", 
    "message": "Commodi consequatur qui libero.", 
    "location": "25909 Hermann Village", 
    "user": { 
     "user_id": "346", 
     "user_name": "Madaline.Mayer60346", 
     "full_name": "Conor Hyatt", 
     "avatar_url": "http://lorempixel.com/640/480" 
    } 
    }, 
    { 
    "tweet_id": "504261", 
    "message": "Atque hic ut velit.", 
    "location": "42920 Esmeralda Lakes", 
    "user": { 
     "user_id": "347", 
     "user_name": "Madaline", 
     "full_name": "Conor Test", 
     "avatar_url": "http://lorempixel.com/640/480" 
    } 
    } 
] 

回答

1

看起來像你想結合推文的集合。這個怎麼樣?

MATCH (me:User{user_id: "346"})-[:POSTS]->(t:Tweet) 
WITH me, COLLECT(t) as myTweets 
MATCH (me)-[:FOLLOWS]->(following:User)-[:POSTS]->(t:Tweet) 
WITH myTweets + COLLECT(t) as allTweets 
UNWIND allTweets as tweets 
RETURN tweets 
SKIP 10 LIMIT 10 

在進行分頁時使用ORDER BY通常是一個好主意。或者,您可以放棄UNWIND並獲取該集合的相關幻燈片(RETURN tweets [10..20]),並且如果您需要通過屬性訂購您的節點集合,則有一個APOC過程用於該屬性apoc.coll.sortNodes()

編輯:

你可以嘗試這個查詢,而其MATCH應該返回你和你正在關注的用戶的推文。然而,SKIP和LIMIT雖然可以工作,但可能不會返回您想要的結果集,因爲您目前沒有提供ORDER BY子句(如果您自己提供這個子句,那麼您還應該添加一個索引在您訂購的財產上)。

MATCH (me:User{user_id: "346"})-[:POSTS|:FOLLOWS*1..2]->(t:Tweet) 
RETURN t 
SKIP 10 LIMIT 10 

編輯

關於你提到的有關錯誤的最後一個問題,嘗試使用APOC程序時,您不能使用它們那樣,直接爲一組操作的一部分。

試試這個:

MATCH (t:Tweet{tweet_id: '1'}) 
CALL apoc.date.parseDefault(t.created_at, 'ms') YIELD value 
SET t.created_milliseconds = value 
RETURN t 
+0

感謝您的反饋意見。首先,你的更新代碼工作。但它對響應數據太慢(我的推特樣本數據庫> 3GB)。是否有其他更新來提高性能? 另外,感謝APOC庫 –

+0

性能問題:在156480毫秒內返回10行。 –

+0

嘗試用這個「MATCH(me:User {user_id:」346「})替換這一行」MATCH(me:User {user_id:「346」}) - [:POSTS] - >我MATCH(我) - [:POSTS] - >(t:鳴叫)「 – Evgen