如何在集合中逐个提取值,然后立即使用它来设置其他属性

时间:2017-02-16 00:23:59

标签: neo4j cypher database nosql

match(n:User {name:"Ramu"}) with (n.bmrx+n.daily_avg_cal) as a

with a

match p= (f:Recipe {time:"Breakfast"})-[:is_diet]->(j:Diet{name:"Vegetarian"}) with collect(f) as d,p,a

with a,p,d foreach(x IN d|create unique (n:DietPlan {dp_id:"DP1"})-[r:contains {amt:(a*0.5)/x.Energy_per_Serving, unit:"No of Servings"}]->(m:Recipe {Recipe_ID:(x.Recipe_ID)}) )

所以在这里,我想从d中提取Vegetarian Recipe节点,并逐一使用它们来计算各自的服务大小(“(a * 0.5)/x.Energy_per_Serving”),在DietPlan之间创建新的关系和收集的食谱,并在那里添加“amt”。 但这会产生“未绑定模式”错误。我也尝试使用MERGE,但这不起作用,因为dp_id和Recipe_ID是唯一约束。 请帮助!

1 个答案:

答案 0 :(得分:0)

您绑定了一些从未在查询的其余部分中使用的变量,因此我们可以删除p和j。

由于这里只有一个饮食计划,您可能希望在更复杂的素食早餐比赛之前与之匹配。

最后,我们在这里不需要forEach,因为在你的最后一场比赛之后你会把每个素食早餐食谱放在自己的行上,所以所需要的只是建立关系。

match(n:User {name:"Ramu"}) 
with (n.bmrx+n.daily_avg_cal) as a
match (dietPlan:DietPlan {dp_id:"DP1"})
match (recipe:Recipe {time:"Breakfast"})-[:is_diet]->(:Diet{name:"Vegetarian"})
with a, dietPlan, recipe
create unique (dietPlan)-[:contains {amt:(a*0.5)/x.Energy_per_Serving, unit:"No of Servings"}]->(recipe)