 <p>If the <code>POST</code> structure always looks like this you can try:</p> <pre><code>// match the whole user-post-post path MATCH (u:USER {name: "Lamoni"})-[:CREATED]-(p_direct:POST)-[:RESHARED]-(p_shared:Post) WITH u, p_direct, p_shared OPTIONAL MATCH (p_direct)&lt;-[:LIKES]-(u2:USER) OPTIONAL MATCH (p_shared)&lt;-[:LIKES]-(u3:USER) RETURN u.name, p_direct.xyz, collect(u2.name), p_shared.xyz, collect(u3.name) </code></pre> <p>If you just want all <code>USERS</code> that like a <code>POST</code> by a given <code>USER</code> (independent of the type of <code>POST</code>, created or shared) you can also collect all <code>POST</code>:</p> <pre><code>MATCH (u:USER {name: "Lamoni"})-[:CREATED|RESHARED*1..2]-(p:Post) WITH u, p OPTIONAL MATCH (p)&lt;-[:LIKES]-(u2:USER) WITH u.name, p, u2 ORDER BY u2.created_at RETURN u.name, p, collect(u2.name) </code></pre>