Я пытаюсь создать запрос с использованием cypher, который будет "обнаруживать" недостающие компоненты, которые может иметь шеф-повар. Мой график настроен так:
(ingredient_value)-[:is_part_of]->(ingredient)
(ingredient)
будет иметь ключ/значение name= "цветов красителя". (ingredient_value)
может иметь ключ/значение значения = "красный" и "является частью" (ingredient, name="dye colors")
.
(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)
Я использую этот запрос, чтобы получить все ingredients
, но не их фактические значения, которые требуется для рецепта, но я бы хотел, чтобы возвращал только ingredients
, который у шеф-повара нет, вместо всех ингредиенты, необходимые для каждого рецепта. Я попробовал
(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)<-[:has_ingredient*0..0]-chef
но это ничего не вернуло.
Является ли это чем-то, что может быть выполнено cypher/neo4j, или это то, что лучше всего обрабатывать, возвращая все ингредиенты и самостоятельно сортируя их?
Бонус: Также есть способ использовать cypher для соответствия всем значениям, которые повар имеет для всех значений, которые требуется рецепту. Пока что я вернул все частичные совпадения, возвращаемые chef-[:has_value]->ingredient_value<-[:requires_value]-recipe
и агрегируя результаты самостоятельно.