2013-12-26 3 views
3

, например:Neo4j Шифр ​​мульти отношения между узлами

а- [г] -> Ь, есть несколько г между двумя узлами, каждый из r.userId является уникальным.
(например: a- [r: R {userId: "user1"}] -> b, (a- [r: R {userId: "user2"}] -> b,
и то же самое для a- [г] -> с

И ситуация а- [г] -> Ь имеет отношение: r.userId = amdin, но а- [г] -> с не имеет это отношение.

, как я могу вернуть только с

я пытаюсь создать шифр:

«MATCH. (а: SomeLabel) - [ r: SomeR] -> (any: SomeLabel) "
" WHERE id (a) = 0 И r.userId <> \ "admin \" "
" ВОЗВРАТИТЬ любой ";

, но это также будет возвращать б, поскольку а-> Ь имеет другие отношения: r.userId = хххх

как я могу написать шифра вернуть узлы не user.id = выслать ему «админ». .....

Если вы не четко понимать, что я говорю, пожалуйста, дайте мне знать .... Мне нужна ваша помощь для этого case..thanks

Я рисую картину ниже, мульти отношения named sr, но с различными свойствами (userId уникален), и я хочу найти все узлы, связанные с узлом A, но не содержащие sr {userId: admin}, я добавляю туда красную подчеркивание. Так как на картинке, узел B имеет отношения SR {идентификатор пользователя: админ}, так что я только хочу, чтобы вернуть узел C, без узла B

enter image description here

ответ

6

Для отображения простых представлений о проблемах с графом graphgists действительно полезны, поскольку люди могут исследовать данные. Я создал один на основе вашего описания: http://gist.neo4j.org/?94ef056e41153b116e4f

вашей проблемы, вы можете собрать все имена пользователей, участвующих в отношениях каждой пары узлов и фильтра на основе тех:

MATCH (a { name:'A' })-[r:sr]->b 
WITH a,b, collect(r.name) AS usernames 
WHERE NOT 'admin' IN usernames 
RETURN a, b 
+0

Fenzi, спасибо большое !!! – Awakening

0

Ваш вопрос довольно неясно. Моя интерпретация заключается в том, что вы хотите найти узлы c, которые не подключены к узлу a с отношением типа R.

Вы в основном хотите сделать отрицательный матч или искать шаблон, который не существует. Отрицательные образцы могут быть получены с помощью where not:

MATCH (a:SomeLabel), (c:SomeLabel) 
WHERE ID(a)=0 AND NOT (a)-[:R]->(c) 
RETURN c 

Это возвращает список всех узлов SomeLabel не подключенных к a.

См. http://docs.neo4j.org/chunked/stable/query-where.html#query-where-patterns в справочнике.

+0

я добавить ПИК глубоко объяснить мой вопрос, так что теперь вы можете понять? – Awakening

Смежные вопросы