2013-11-21 167 views
1

我有DB,我想連接所有具有相同屬性的節點。例如:neo4j添加關係到具有相似屬性的節點

node("name"="Bob","age":"32") 
node("name"="cherry","age":"32") 

我想在兩個節點之間建立關係"age"。它如何完成? 我使用py2neo python模塊。 非常感謝!

+1

你在說什麼屬性或標籤?你試過什麼了? – jjaderberg

+0

屬性,對不起。現在編輯。 – Wumpus

+0

目前還不清楚你想要做什麼。你是否想爲age:32創建一個節點,並將其他兩個節點連接到它? –

回答

1

你的問題是有點模糊,但對於一個非常通用的解決方案,你可以嘗試這樣的暗號查詢(2.0語法)

MATCH n, m 
WHERE n<>m AND n.age = m.age AND NOT (n-[:AGE]->m) 
CREATE n-[r:AGE]->m 
RETURN r 

這將需要每個節點並查找有任何其他節點屬性age的值相同,併爲該節點創建關係[:AGE]。它檢查相關節點是否與其他節點之間沒有這種關係,因此,如果再次運行該節點(但它確實在兩個方向上創建關係),則不會獲得重複,並且還會檢查其他節點節點與第一個節點不同,所以它不會創建節點與其自身的關係。如果您想爲其他屬性執行相同的操作,則只需將該屬性名稱替換爲age併爲關係設置不同的類型即可。

由於您沒有指定您的要求,我認爲這會回答您的問題。你也可以在Python代碼中實現這個功能,如果這就是你想要做的,也許你可以展示你到目前爲止已經嘗試過的東西(你的問題中的代碼片段看起來不像是有效的python)。建議可能需要考慮在相關屬性上索引節點,因此當您有像(Bob {age:32})這樣的節點時,可以查找具有相同年齡值的所有其他節點,遍歷結果並創建關係,而不是迭代遍歷所有節點每次在數據庫中的節點。 Cypher也是如此,標籤和索引可以提高真實數據集的性能,但上面的查詢說明了可以完成的方法。

+0

非常感謝!這正是我需要的!只有一個小問題,我必須在MATCH(版本1.9)之前使用START,我可以如何忽略不存在屬性「年齡」的節點? – Wumpus

+0

閱讀「WHERE」的文檔,例如http://docs.neo4j.org/chunked/stable/query-where.html#where-property-exists – jjaderberg

相關問題