使用neo4j社區版本2.x.在Cypher中,我需要以兩種不同的方式來匹配MATCH節點,然後將這些(兩個)匹配節點集合成單個集合(一個變量名稱)。這一套將用於進一步的行動。將來自更多MATCH的節點組合成單個變量
naive graph example(我不能發表圖片)
我想找到松鼠的所有知識,包括由組她的成員共享知識。 (例子是虛構的)
我想是這樣的:
MATCH (u:User{username:'squirrel'}), (:User{username:'squirrel'})<-[:MEMBER]-(g:Group)
WITH "COMBINATION OF u AND g" AS ug
MATCH (ug)-[:KNOW_HOW]->(k:Knowledge)
RETURN k.type
成果既要「破解堅果」和「逃避天敵」。
代替「u與g的組合」,我嘗試了collect(u)+ collect(g),EXTRACT等的變體。沒有成功。
到目前爲止,我發現最簡單的工作方式是使用UNION。
MATCH (u:User{username:'squirrel'})-[:KNOW_HOW]->(k:Knowledge)
RETURN k.type
UNION
MATCH (u:User{username:'squirrel'})<-[:MEMBER]-(:Group)-[:KNOW_HOW]->(k:Knowledge)
RETURN k.type
這可能會解決這個簡單的例子,但不適合更復雜的查詢。我尋求解決更一般問題的方法:匹配幾組節點,將它們粘合成單個集合(單個變量)並繼續使用這個新集合。
有什麼想法嗎?我缺少一些基本的東西嗎?或者這是不可能的?謝謝!
在grokbase上可能類似的東西。
編輯:
隨着this hacky solution to similar question我是能夠解決由節點的集合提取內部ID的問題:
MATCH (u:User{username:'squirrel'}), (:User{username:'squirrel'})<-[:MEMBER]-(g:Group)
WITH [x in collect(u)+collect(g)|id(x)] as collectedIds MATCH (ug) WHERE id(ug) in collectedIds
MATCH (ug)-[:KNOW_HOW]->(k:Knowledge)
RETURN k.type
能不能做到更好嗎?