在我的Neo4j 2.0服務器數據庫中我有一個森林,即一組樹。我的一個用例是獲取任意子樹節點的子節點。Cypher:一個調用中的多個獨立查詢
舉例來說,我有根節點
root1 root2 root3 root4
,現在我想的root1
和root4
子節點。 我需要知道哪些孩子屬於哪個根。每個查詢都是一個簡單的MATCH Cypher查詢。但爲了提高性能,我希望保持數據庫調用的數量低,因爲我使用Neo4j服務器。因此,我正在想辦法告訴Cypher「給我root1和root4的子項並告訴我哪個節點屬於結果中的哪個根」。那就是,我想到了一種地圖。或者一組結果集合,其中第一個元素是第一個根節點的子節點,第二個元素是第二個根節點的子節點等。
有沒有辦法在Cypher中執行此操作,否則我將不得不掉落回到服務器插件在這裏?
謝謝,最好的問候!
編輯:
澄清:我主要擔心的是,我需要知道哪些孩子屬於哪個根。作爲一個例子,考慮此命令生成小圖:
create (r1:ROOT {name:"root1"}),
(r2:ROOT {name:"root2"}),
(c11:CHILD {name:"child1_1"}),
(c12:CHILD {name:"child1_2"}),
(c13:CHILD {name:"child1_3"}),
(c21:CHILD {name:"child2_1"}),
(c22:CHILD {name:"child2_2"}),
(c23:CHILD {name:"child2_3"}),
(r1)-[:HAS_CHILD]->(c11),
(r1)-[:HAS_CHILD]->(c12),
(r1)-[:HAS_CHILD]->(c13),
(r2)-[:HAS_CHILD]->(c21),
(r2)-[:HAS_CHILD]->(c22),
(r2)-[:HAS_CHILD]->(c23)
在這裏,我們分別得到root1
和root2
,有三個孩子。
要獲得root1
孩子我會發出以下查詢:
MATCH (r:ROOT)-[:HAS_CHILD]->c where r.name='root1' RETURN collect(c)
現在我知道根root1
的孩子。 現在的問題是:如果查詢看起來像查詢root1
和root2
的孩子,其結果將顯示哪個孩子屬於哪個根的關聯。因爲很清楚查詢
MATCH (r:ROOT)-[:HAS_CHILD]->c where r.name='root1' OR r.name='root2' RETURN collect(c.id)
會給我兩個孩子的根。但是現在我不知道哪根有哪個孩子。那麼我能做什麼?
這不應該是一個問題,什麼是查詢一棵樹看起來像?如果您通過屬性值查找單個根,則可以修改它以通過值集合查找許多根。 – jjaderberg
是的,給我們更多的細節,我們可以建立你的查詢。 –
非常感謝您的意見。請接受我對不太詳盡的問題描述的道歉,我希望現在更清楚。 – khituras