我有一個 Neo4j 資料庫,其中有成分節點和配方節點。一個食譜連接到許多節點,因此,對于簡單的切達三明治,食譜節點將連接到面包和切達干酪。我想要實作的是查詢所有包含例如至少胡椒和鹽的食譜,所以如果我的食譜有胡椒、鹽和火腿,它就會匹配。我在這個例子中嘗試過的是:
WITH ['pepper', 'salt'] as ingredients
MATCH (i:Ingredient)-[:INGREDIENT_OF]->(r:Recipe)
WHERE i.name in ingredients
WITH r, size(ingredients) as inputCnt, count(DISTINCT i) as cnt
WHERE cnt = inputCnt
RETURN r;
但它只與確切成分只有胡椒和鹽的食譜相匹配。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
您所做的是查詢任何至少包含鹽或胡椒的食譜。如果您希望您的食譜同時包含兩者,您將無法實作。
你可以試試這個查詢:
MATCH (i:Ingredient)-[:INGREDIENT_OF]->(r:Recipe)
WITH r, collect(i.name) as recipeIngredients, ['salt', 'pepper'] as requiredIngredients
WHERE apoc.coll.containsAll(recipeIngredients, requiredIngredients)
RETURN r;
在這里,您首先獲得所有配方成分,然后匹配那些棕褐色包含您需要的所有成分。此解決方案使用庫 apoc,請確保已安裝它。
uj5u.com熱心網友回復:
這看起來是一種非常尷尬的方式。
大多數人會使用關系資料庫和 SQL。
資料庫將有一個表,存盤關系“成分用于配方”,該關系將成分 ID 連接到配方 ID。
然后你寫
SELECT recipe_id FROM used_in WHERE ingredient_id = ingedient1
AND ingredient_id = ingedient2;
就是這樣!你會得到一份使用這兩種成分和可能的其他成分的所有食譜的清單
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380079.html
