2016-11-23 104 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