Neo4j控制台:类型不匹配:预期Collection <t>但是Node

时间:2017-03-03 08:11:45

标签: neo4j console

我的查询不起作用。错误是:

  

类型不匹配:预期收集,但节点来自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))

我不知道错误在哪里。

3 个答案:

答案 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时,它可能只返回第一个节点。