我有DB,我想連接所有具有相同屬性的節點。例如:neo4j添加關係到具有相似屬性的節點
node("name"="Bob","age":"32")
node("name"="cherry","age":"32")
我想在兩個節點之間建立關係"age"
。它如何完成? 我使用py2neo
python模塊。 非常感謝!
我有DB,我想連接所有具有相同屬性的節點。例如:neo4j添加關係到具有相似屬性的節點
node("name"="Bob","age":"32")
node("name"="cherry","age":"32")
我想在兩個節點之間建立關係"age"
。它如何完成? 我使用py2neo
python模塊。 非常感謝!
你的問題是有點模糊,但對於一個非常通用的解決方案,你可以嘗試這樣的暗號查詢(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也是如此,標籤和索引可以提高真實數據集的性能,但上面的查詢說明了可以完成的方法。
非常感謝!這正是我需要的!只有一個小問題,我必須在MATCH(版本1.9)之前使用START,我可以如何忽略不存在屬性「年齡」的節點? – Wumpus
閱讀「WHERE」的文檔,例如http://docs.neo4j.org/chunked/stable/query-where.html#where-property-exists – jjaderberg
你在說什麼屬性或標籤?你試過什麼了? – jjaderberg
屬性,對不起。現在編輯。 – Wumpus
目前還不清楚你想要做什麼。你是否想爲age:32創建一個節點,並將其他兩個節點連接到它? –