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]-recipe
und die Ergebnisse selbst aggregiert.
exists
in einer WHERE
Klausel (auch negieren) auch neo4j.com/developer/subqueries/#existential-subqueries für weitere Informationen verwenden.