Я пытаюсь создать запрос с использованием шифра, который будет «находить» недостающие ингредиенты, которые могут быть у шеф-повара. Мой график настроен следующим образом:
(ingredient_value)-[:is_part_of]->(ingredient)
(ingredient)
будет иметь ключ / значение name = "dye colors". (ingredient_value)
может иметь ключ / значение value = "red" и "является частью" (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, или это то, что лучше всего решить, вернув все ингредиенты и отсортировав их самостоятельно?
Бонус: также есть способ использовать шифр, чтобы сопоставить все значения, которые есть у шеф-повара, со всеми значениями, которые требует рецепт. До сих пор я возвращал только все частичные совпадения, которые возвращает chef-[:has_value]->ingredient_value<-[:requires_value]-recipe
, и сам собираю результаты.
exists
в предложенииWHERE
(также отрицать его), neo4j.com/developer/ subqueries / # existential-subqueries для получения дополнительной информации. - person ozanmuyes   schedule 31.03.2020