2015-10-06 3 views
0

Я пытаюсь исключить узлы из запроса. Мой график состоит из пользователей, навыков, умение вести счет, вопросов и эндоЗапрос Cypher для исключения результатов, основанных на отношении

  • пользователь имеет навыки
  • умение имеет задир в связи с вопросами ((квалификация) -> (задиры) -> (вопросы))
  • эндо является соотношением для пользователей и навыков задиров ((пользователей) -> (ENDOS) -> (задиры))

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

Я думал, что я мог бы сделать:

MATCH (u:`User`), 
    u<-[rel1:`USERS`]-(s:`Skill`), 
    s-[rel2:`SKILLS`]->(k:`SkillScoring`), 
    k-[rel3:`ANSWER`]->(q:`Question`), 
    u<-[rel4:`ENDO`]-(e:`Endo`) 

WHERE NOT((e)-->(u)) AND (u.id='1') 

RETURN u, e, k, q 

UPDATE:

эндо узлы соединены, как это.

  • синий пользовательский узел
  • фиолетовый Журнализированная узел одобрения (созданный в)
  • зеленый цвет умение скоринг узел

На самом деле отношения «ОДОБРЕНИЕ» имеет узел (journalised), который соединяет умение скоринг узлы

endo relationship

UPDATE:

Когда я выполнить этот запрос, он возвращает меня вопрос в связи с пользователем

MATCH (u:User), 
    u<-[rel1:USERS]-(s:SoftSkill), 
    s-[rel2:SOFT_SKILLS]->(k:SkillScoring), 
    k-[rel3:ANSWER]->(q:Question), 
    u<-[:ENDO]-()<-[:ENDO]->(k) 
WHERE u.id='1' 
RETURN q, u 

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

MATCH (u:User), 
    u<-[rel1:USERS]-(s:SoftSkill), 
    s-[rel2:SOFT_SKILLS]->(k:SkillScoring), 
    k-[rel3:ANSWER]->(q:Question) 
WHERE u.id='1' AND NOT u<-[:ENDO]-()<-[:ENDO]->(k) 
RETURN q, u 

Что случилось? Какие-либо предложения?

Благодаря

+0

Не могли бы вы привести пример вопроса, который запрос не может исключить? Возможно, картина всей модели, где вы отмечаете возвращаемый узел, который не должен возвращаться? – jjaderberg

ответ

1

Ваш запрос первый говорит, что u имеет :ENDO отношения с e, то, что e не имеет никакого отношения к u, но это не может быть.

Как подключаются узлы endo к ошибкам/вопросам в тех случаях, которые вы хотите исключить? Не могли бы вы попробовать что-то вроде

MATCH (u:User)-[rel1:USERS]->(s:Skill)-[rel2:SKILLS]->(k:SkillScoring)-[rel3:ANSWER]->(q:Question) 
WHERE u.id = '1' AND NOT u<-[:ENDO]-()-[:??]->k 

и заполнить тип отношений в ?? для того, как подключен узел эндо (анонимный узел () выше)?

Если вы хотите, вы можете создать примерный график в http://console.neo4j.org, что поможет сделать ваше намерение понятным.

Кроме того, хорошо использовать обратные метки вокруг ярлыков и отношений, но вы не должны нуждаться в, если они не содержат пробелов или некоторых других необычных символов.