У меня есть график, содержащий типы узлов Fruit, Veggie и Dish, с одним типом отношения [:in]
, чтобы указать, какие ингредиенты содержатся в каждом блюде.
Пример данных:
create (A:Ingredient:Fruit { name: "Apple" }),
(B:Ingredient:Fruit { name: "Banana" }),
(C:Ingredient:Veggie { name: "Cellery" }),
(D:Ingredient:Veggie { name: "Daikon" }),
(E:Ingredient:Veggie { name: "Eggplant" }),
(F:Ingredient:Veggie { name: "Fennel" }),
(G:Ingredient:Veggie { name: "Gord" }),
(H:Ingredient:Veggie { name: "Horseradish" }),
(Salad:Dish { name: "Salad" }),
(FruitBowl:Dish { name: "FruitBowl" }),
(Platter:Dish { name: "Platter" }),
(StirFry:Dish { name: "StirFry" }),
(A)-[:in]->(FruitBowl),
(B)-[:in]->(FruitBowl),
(A)-[:in]->(Platter),
(B)-[:in]->(Platter),
(C)-[:in]->(Platter),
(D)-[:in]->(Platter),
(C)-[:in]->(Salad),
(D)-[:in]->(Salad),
(E)-[:in]->(Salad),
(F)-[:in]->(StirFry),
(G)-[:in]->(StirFry),
(H)-[:in]->(StirFry)
Я пытаюсь выяснить, как запросить список овощей, которые только отображаются в блюдах, в которых только овощи . Я могу получить первую часть (список блюд, которые имеют только овощи) с этим запросом:
match (d:Dish)
where not ((:Fruit)-[:in]->(d))
return d
Это возвращает Salad
и StirFry
, как я и ожидал.
Есть ли способ затем запросить все овощи, которые только принадлежат этому набору? (в этом примере только Veggies E, F, G, & H) Если нет, или если это действительно трудно сделать, есть ли лучший способ структурировать эти данные, чтобы сделать эти очевидные отношения более очевидными?