2014-12-30 2 views
0

I'am написание Cypher запрос, который является:Cypher переменного значения пустой при запросе

MATCH (user:User{email: "[email protected]"})-[:friendsWith]->(friend:User) , (friend:User)-[:MadeRecipe]->(rec:Recipe) 
WHERE not (friend.email = "[email protected]") 
set rec.ifLiked = "false" 
with rec 
match (m:Recipe {name:"myName"}) 
return rec 

она ничего не возвращает (0 узлов)

если удалить строку:

match (m:Recipe {name:"same"}) 

он возвращает желаемые значения, что не так ?? !! , строка, которую я добавил, не должна изменять значение rec !!!

+0

Зачем вам это нужно? Вместо того, чтобы просто говорить «с rec» и делать другое совпадение, почему бы вам не вернуть «rec» сразу без дополнительного совпадения? Это решит вашу проблему и станет более простым запросом. – FrobberOfBits

+0

Я хочу еще одну важную вещь вместо соответствия (m: Рецепт {name: "myName"}), но я не ставил для простоты: D – user3703910

+0

Ну, я думаю, что это не работает, потому что 'rec' не замечен нигде в вашем матче. – FrobberOfBits

ответ

0

На самом деле не имеет смысла приводить переменную с помощью предложения WITH, но затем не упоминать об этом в последующем запросе, поэтому вы должны переформулировать свой запрос.

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

MATCH (user:User{email: "[email protected]"})-[:friendsWith]->(friend:User) , (friend:User)-[:MadeRecipe]->(rec:Recipe) 
WHERE not (friend.email = "[email protected]") 
set rec.ifLiked = "false" 
RETURN rec; 

Другим вариант:

MATCH (user:User{email: "[email protected]"})-[:friendsWith]->(friend:User) , (friend:User)-[:MadeRecipe]->(rec:Recipe) 
WHERE not (friend.email = "[email protected]") 
set rec.ifLiked = "false" 
WITH rec 
MATCH rec, (m:Recipe {name:"myName"}) 
RETURN rec; 

Это будет работать, но обратите внимание на дополнительный матче на m:Recipe еще Безразлично» t имеет смысл, поскольку он не является частью RETURN, а также не является частью какого-либо более позднего предложения SET.

+0

вот весь запрос MATCH (пользователь: Пользователь {email: "[email protected]"}) - [: friendsWith] -> (друг: Пользователь), (друг: Пользователь) - [: MadeRecipe] -> (rec: рецепт) WHERE not (friend.email = "[email protected]") set rec.ifLiked = "false" с rec, пользователь совпадение (пользователь) - [: likeRecipe] -> (понравилосьRecipe: Recipe) комплект любимыйRecipe.ifLiked = "true" return rec – user3703910

+0

, и я попробовал ваш запрос, он дал мне те же результаты, что и мои – user3703910

+0

Вы должны сделать это как два отдельных запроса. Ваши два матча полностью не связаны друг с другом. – FrobberOfBits

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