2013-09-23 30 views
1

将元素追加到集合并确保该元素仅在集合中出现一次的最佳方式是什么?neo4j对集合追加唯一

基本上我有一个标签列表,并希望追加新的标签。像下面的查询,除了在n.index所有元素的东西都必须是唯一

MATCH n, tag:Tag 
WHERE n.id='22cfb053-f772-4a3a-83c4-bb733e3dac0a' AND tag.name='hello world' 
SET n.index=n.index+tag.index 
RETURN n; 

回答

0

你应该考虑通过TAGGED关系的内容节点连接到Tag节点。

对于合并使用文字集合和+。 n.index已经必须是数组属性。

MATCH (n:Content), (tag:Tag) 
WHERE n.id='22cfb053-f772-4a3a-83c4-bb733e3dac0a' AND tag.name='hello world' 
SET n.index=n.index+[tag.index] 
RETURN n; 
+0

的节点已经连接通过这样的关系来标记。该属性仅用于查询,因为要支持多字标记,我必须将搜索索引添加到内容节点,而不仅仅是标记。我认为从索引中删除重复项是一个好主意,但实际上现在我已经尝试了一下,毕竟我认为它可能没有必要。我想如果我需要做更多特定的索引,我必须使用Java API,对吧? – user2608171

+0

如果您使用的手动索引可以让您随意索引,那么Java API是您最好的朋友。 –

0
MATCH n, tag:Tag 
WHERE n.id='22cfb053-f772-4a3a-83c4-bb733e3dac0a' AND tag.name='hello world' 
WITH n, FILTER(x IN n.index WHERE x <> tag.index) as filtered 
SET n.index=filtered + tag.index 
RETURN n;