问题描述
这些关系是:(商店)-[:OF]->(用户),(产品)-[:OF]->(用户),(商店)-[:卖]->(产品)>
添加或更新商店时,可以从商店中添加,更新,附加或删除产品。 仅当产品没有其他商店的附件时,才能进行更新。
OPTIONAL MATCH (user: User {id: $userId} )
CREATE (store:Store)-[:OF]->(user)
SET store = $store
WITH store,user
OPTIONAL MATCH (p: Product {id: "hu1"})-[:OF]->(user)
WITH store,p,CASE WHEN NOT (:Store)-[:SELL]->(p) OR
(:Store {id: '12asd'})-[:SELL]->(p) THEN [1]
ELSE [] END as array
FOREACH(
x in array |
MERGE (p)-[:OF]->(user)
ON MATCH SET p += $product1
ON CREATE SET p = $product1
MERGE (store)-[:SELL]->(p)
)
RETURN store,p
(看起来很奇怪,我的条件之一是在刚创建商店ID时检查商店ID,但是此代码中的此查询在需要时可以处理更多情况,并且我不会为整个问题烦恼代码)
需要进行的修改将商店的创建移至FOREACH语句,因为,如果其中一种产品未通过CASE条件之一,我就不会创建商店。
我尝试使用MERGE在FOREACH语句内移动商店创建-
OPTIONAL MATCH (user: User {id: $userId} )
WITH user
OPTIONAL MATCH (p: Product {id: "1"})-[:OF]->(user)
WITH p,CASE WHEN NOT (:Store)-[:ON]->(p) OR
(:Store {id: 'st'})-[:ON]->(p)
THEN [1]
ELSE [] END as array
FOREACH(
x in array |
MERGE (p)-[:OF]->(user)
ON MATCH SET p += $product1
ON CREATE SET p = $product1
MERGE (store:Store {id: 'st'})
ON MATCH SET store += $store
ON CREATE SET store = $store
MERGE (store)-[:ON]->(p)
)
RETURN store,p
但是我得到了这个错误:
Neo4jError:变量
store
未定义
指向RETURN语句中的store
变量。
我尝试在FOREACH和RETURN之间添加另一个WITH语句,但是我只在WITH子句中指向存储变量时遇到了相同的错误。
如何在FOREACH子句的外部声明变量,以便可以在FOREACH中为其创建节点并在RETURN中使用它?
解决方法
尝试在FOREACH
语句之外声明参数:
OPTIONAL MATCH (user: User {id: $userId} )
WITH user
OPTIONAL MATCH (p: Product {id: "1"})-[:OF]->(user)
WITH p,CASE WHEN NOT (:Store)-[:ON]->(p) OR
(:Store {id: 'st'})-[:ON]->(p)
THEN [1] ELSE [] END as array,$store as store,$product1 as product1
FOREACH(
x in array |
MERGE (p)-[:OF]->(user)
ON MATCH SET p += product1
ON CREATE SET p += product1
MERGE (s:Store {id: 'st'})
ON MATCH SET s += store
ON CREATE SET s += store
MERGE (s)-[:ON]->(p)
)
RETURN store,p