2013-10-21 43 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