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"
    }
  }
]

看起来您想结合推文的集合。这怎么样?

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

通常在分页时使用订单是一个好主意。另外,您可以放弃放松身心并取下相关的幻灯片(返回推文[10..20]),如果您需要通过属性订购节点的集合,则该apoc.coll.sortnodes有一个apoc过程()

编辑:

您可以改用此查询,其匹配应返回您和您正在关注的用户的推文。但是,跳过和限制,尽管它们应该工作,但可能不会返回您想要的结果集,因为您目前没有通过条款提供订单在您要订购的属性上)。

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