Вернуть узел, если отношения нет

Я пытаюсь создать запрос с использованием шифра который «найдет» недостающие ингредиенты, которые могут быть у шеф-повара. Мой график настроен так:

(ingredient_value)-[:is_part_of]->(ingredient)

(ингредиент)будет иметь ключ/значение name="dye colors". (ingredient_value)может иметь ключ/значение value="red" и "является частью" (ingredient, name="dye colors").

(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)

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

(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)<-[:has_ingredient*0..0]-chef

, но это ничего не дало.

Это то, что может быть выполнено cypher/neo4j, или с этим лучше всего справиться, вернув все ингредиенты и отсортировав их самостоятельно?

Бонус: также есть способ использовать шифр для сопоставления всех значений, которые есть у шеф-повара, со всеми значениями, требуемыми рецептом. До сих пор я возвращал только все частичные совпадения, возвращаемые рецептом chef-[:has_value]->ingredient_value<-[:requires_value]-, и сам агрегировал результаты.

81
задан Liam 23 February 2017 в 10:15
поделиться