Neo4j查询:如何在标签中构建多个标签?

时间:2016-11-23 09:19:54

标签: 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 个答案:

答案 0 :(得分: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推文[10..20]),如果你需要按属性订购节点集合,那么apoc.coll.sortNodes()就有一个APOC程序

编辑:

您可以尝试使用此查询,其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