我的查询不起作用。错误是:
类型不匹配:预期收集,但节点来自FOREACH ..
代码:
MATCH (user:User {user_role: 'Customer'})
WITH user
OPTIONAL MATCH (user)-[hv:HAS_VAUCHER]->(v:Vaucher {status: 2})
WITH user, count(hv) as hv
WHERE hv = 0
WITH user
FOREACH (u IN user | CREATE (v:Vaucher {discount: 5, created_at: 1488531600, start_at: 1488531600, type: 'March', status: 2})<-[:HAS_VAUCHER]-(u))
我不知道错误在哪里。
答案 0 :(得分:1)
虽然可以对查询进行一些改进,但这是一个快速修复,因为您没有集合中的用户而删除了FOREACH,并且每行已经有一个用户:
Write
答案 1 :(得分:1)
您可以使用WHERE NOT子句缩短过滤部分,并像这样简化查询
MATCH (user:User {user_role: 'Customer'})
where not (user)-[:HAS_VAUCHER]->(:Vaucher {status: 2})
CREATE (v:Vaucher {discount: 5, created_at: 1488531600,
start_at: 1488531600, type: 'March', status: 2})<-[:HAS_VAUCHER]-(u)
答案 2 :(得分:0)
我做了进一步的研究,其方法是创建一个集合:
MATCH (user:User {user_role: 'Customer'})
WITH user
OPTIONAL MATCH (user)-[hv:HAS_VAUCHER]->(v:Vaucher {status: 2})
WITH user, count(hv) as hv
WHERE hv = 0
WITH user, COLLECT(user) AS users
FOREACH (u IN users | CREATE (v:Vaucher {discount: 5, created_at: 1488531600, start_at: 1488531600, type: 'March', status: 2})<-[:HAS_VAUCHER]-(u))
&#34;用户&#34;当返回时返回N个节点(不是1),但是当传递给FOREACH时,它可能只返回第一个节点。