2

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

4

3 回答 3

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 
于 2013-11-04T20:01:19.633 回答
1

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

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

Cypher 也没有任何功能。

于 2013-10-21T19:03:20.873 回答
-1

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

...
MATCH (fred)-[:LIKES]->(fruit)<-[:LIKES]-(fruit_friend)
WITH fred, COLLECT(DISTINCT(fruit_friend)) as unique_fruit_friends
...
于 2013-10-21T19:12:11.950 回答