2013-10-21 40 views
2

是否有一種簡單的方法可以確保Neo4j/Cypher中的集合中的元素是唯一的?就像把集合變成哈希集合一樣?Neo4j中的集合中的獨特元素

+0

當您說'收集'時,是指查詢的結果,或者作爲節點/關係的屬性? – Nicholas

+0

我的意思是作爲節點上的屬性。 – user2608171

回答

1

實體(節點/關係)屬性沒有Set的概念,它們具有鍵/值,並且允許的值是基元/字符串數組。

如果你想Set類似的功能,它將取決於你的應用程序插入數據來強制這種獨特性。

Cypher對此沒有任何功能。

-1

在暗號,可以用集合(12)工作,你可以通過使用DISTINCTmodifier確保其唯一性,如

... 
MATCH (fred)-[:LIKES]->(fruit)<-[:LIKES]-(fruit_friend) 
WITH fred, COLLECT(DISTINCT(fruit_friend)) as unique_fruit_friends 
... 
1

取決於你正在嘗試做的,你可以用Cypher來做到這一點。

例如,如果您只是想添加一個項目到屬性中,只有當它不存在時,您可以通過幾種方法來完成。

此示例篩選查詢是有用的,如果集合修改是唯一經過修改的屬性:

START n=node({id}) WHERE NONE(x IN n.cols WHERE x = {val}) SET n.cols = n.cols + {val} RETURN n; 

下一個例子將結束一直修改屬性,但會確保其唯一性,並會是一個有用的方法,如果一些其他屬性也需要同時修改,但副作用是項目的順序會發生變化:

START n=node({id}) 
WITH n, FILTER(x IN n.cols WHERE x <> {val}) as existingCols 
SET n.cols = existingCols + {val} 
RETURN n