Ich versuche, mit Cypher eine Abfrage zu erstellen, die fehlende Zutaten, die ein Koch möglicherweise hat, "findet". Mein Diagramm ist folgendermaßen eingerichtet:
(ingredient_value)-[:is_part_of]->(ingredient)
(ingredient)hätte einen Schlüssel / Wert von name = "Farbstofffarben". (ingredient_value)könnte einen Schlüssel / Wert von value = "red" haben und "is part of" the (ingredient, name="dye colors").
(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)
Ich verwende diese Abfrage, um alle ingredients, aber nicht die tatsächlichen Werte zu erhalten, die ein Rezept erfordert, aber ich möchte, dass nur die zurückgegeben werden ingredients, die der Küchenchef nicht hat, anstelle aller Zutaten, die jedes Rezept benötigt. Ich habe es versucht
(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)<-[:has_ingredient*0..0]-chef
aber das gab nichts zurück.
Ist dies etwas, das von cypher / neo4j erreicht werden kann, oder ist dies etwas, das am besten gehandhabt werden kann, indem alle Zutaten zurückgegeben und selbst sortiert werden?
Bonus: Es gibt auch eine Möglichkeit, mit Chiffre alle Werte, die ein Koch hat, mit allen Werten abzugleichen, die ein Rezept benötigt. Bisher habe ich nur alle Teilübereinstimmungen zurückgegeben, die von a zurückgegeben werden, chef-[:has_value]->ingredient_value<-[:requires_value]-recipeund die Ergebnisse selbst aggregiert.
existsin einer WHEREKlausel (auch negieren) auch neo4j.com/developer/subqueries/#existential-subqueries für weitere Informationen verwenden.