我正在使用以下标签处理neo4j图:商店、用户、产品
关系是:(存储)-:OF->(用户),(产品)-:OF->(User),(Store)-:SELL->(产品)
添加或更新存储区时,可以从存储区添加、更新、附加或删除产品。只有当产品没有其他商店的附件时,才能进行更新。
我有以下添加存储查询,该查询正在工作:
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,但代码中的这个查询会在需要时处理更多的情况,而且我不习惯使用整个代码)
所需的修改是将存储的创建转移到FOREACH语句,因为如果其中一个产品没有通过一种情况条件,我就不习惯创建存储。
我尝试使用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
指向返回语句中的store
变量。
我尝试在FOREACH和返回之间添加另一个WITH语句,但是我得到了相同的错误,只指向WITH子句中的存储变量。
我如何在FOREACH子句的外面声明一个变量,以便在FOREACH中为它创建节点,并在返回中使用它?
发布于 2020-09-08 11:10:04
尝试在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
https://stackoverflow.com/questions/63756254
复制相似问题