Neo4j中的独特元素

时间:2013-10-21 18:47:00

标签: neo4j cypher

是否有一种简单的方法可以确保Neo4j / Cypher中集合中的元素是唯一的?像将集合变成哈希集的东西?

3 个答案:

答案 0 :(得分:2)

根据您的目的,您可以使用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 

答案 1 :(得分:1)

实体(节点/关系)属性没有Set的概念,它们具有键/值,而允许的值是原始/字符串数组。

如果您需要Set类似的功能,则应由您的应用程序插入数据以强制执行此唯一性。

Cypher也没有任何功能。

答案 2 :(得分:-1)

在cypher中,您可以使用集合(12),并且可以使用DISTINCT modifier来确保唯一性,如

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