2014-11-26 4 views
1

У меня есть две метки, назовем их: Красный и зеленый. Все узлы под обоими надписями имеют свойство «name». Я хочу использовать Cypher для перечисления этих узлов в: Red, которых нет в: Green, соответствует имени. У любого узла будет либо: красная метка, либо зеленая метка, ни одна из них.Разница набора узлов этикеток

Учитывая эти узлы:

(:Red {name:"One"}) 
(:Red {name:"Two"}) 
(:Red {name:"Three"}) 
(:Green {name:"One"}) 
(:Green {name:"Two"}) 
(:Green {name:"Five"}) 

Я хотел бы красно-но-не-зеленый запрос, чтобы показать только один узел, для имени = «Три», потому что кажется, что значение имени под: Red Label, но не под: Зеленый.

Из моего чтения и эксперимента, для EXISTS() требуется связь между узлами. Я не хочу добавлять это только для запроса, а затем удалять его снова. OPTIONAL MATCH дает желаемый результат, возвращая NULL для не спаренных узлов. Однако прокрутка списка непрактична для нетривиальных наборов данных.

Использование сообщества 2.1.5.

ответ

0
create 
(:Red {name:"One"}), 
(:Red {name:"Two"}), 
(:Red {name:"Three"}), 
(:Green {name:"One"}), 
(:Green {name:"Two"}), 
(:Green {name:"Five"}); 

MATCH (r:Red) 
OPTIONAL MATCH (g:Green { name:r.name }) 
WITH r,g 
WHERE g IS NULL 
RETURN r,g 

см: http://console.neo4j.org/r/ya2uw8

0

Это следует сделать это:

MATCH (n:Red) 
WHERE NOT "Green" in labels(n) 
RETURN n.name 
+0

Вопрос отредактирован уточнить. Сожалею. –

+0

предоставляют образец данных с использованием http://console.neo4j.org –