neo4j - 如何在 Neo4j 中使用带有 `call.apoc.do.when` 的 `with` 语句?
问题描述
首先,您可以使用以下命令创建示例节点,
CREATE (t1:Title { tid: '123abc'})
CREATE (t2:Title { tid: '123def'})
CREATE (t3:Title { tid: '123456'})
CREATE (t4:Title { tid: '123789'})
CREATE (u:User { pid: '456def'})
CREATE (t1)-[r:TO]->(t2)
CREATE (t2)-[r:TO]->(t3)
CREATE (t3)-[r:TO]->(t4)
CREATE (u)-[r:LIKE]->(t3)
这是图表,
我在 Neo4j 中有这样的查询,
MATCH (t1:Title)-[r:TO]->(t2:Title)
WHERE t1.tid = '123abc'
AND NOT exists((t2)<-[:LIKE|:DISLIKE|:LOVE]-(:User {pid: '456def'}))
WITH COLLECT(r) AS rels
LIMIT 1
WITH rels
CALL apoc.do.when(
SIZE(rels) > 0,
'RETURN REDUCE(total = 0, x IN rels | total + x.weight) AS result',
'RETURN 0 AS result'
) YIELD value
RETURN value.result
我想在博客中使用rels
变量。do.when
表达没有问题SIZE(rels) > 0
,但if statement
返回这样的错误,
调用过程失败
apoc.do.when
:原因:org.neo4j.exceptions.SyntaxException:变量rels
未定义(第 1 行,第 31 列(偏移量:30))“返回减少(total = 0,x IN rels | total + x.weight)AS结果”
我是 Neo4j 的新手。我认为,有一个特殊情况REDUCE
。我怎么解决这个问题?提前致谢。
解决方案
可以使用聚合函数 SUM
直接获得总和:
MATCH (t1:Title)-[r:TO]->(t2:Title)
WHERE t1.tid = '123abc' AND NOT EXISTS((t2)<-[:LIKE|:DISLIKE|:LOVE]-(:User {pid: '456def'}))
RETURN SUM(r.weight) AS result
推荐阅读
- spring-boot - 复杂的返回类型,带有 Spring WebFlux 返回响应状态、标头和正文,稍后异步返回
- python - 如何在 Python 中使用 session.get 请求发回 XSRF 令牌?
- c++ - Windows Spotify 集成
- javascript - 沿六边形的轨迹移动对象
- java - Discord Java JDA - 在 MessageReactionRemoveEvent 中获取成员
- javascript - 如何添加两个 getElement 和一个提交按钮来制作一个 If Statment?
- snowflake-cloud-data-platform - Alteryx 最多只能从 Snowflake 中提取 100 万行
- javascript - 查找查询中的第二个赞
- java - Android studio firebase 循环遍历节点的子节点并保存在 ArrayList 中
- sql - 从 BigQuery 中的多个列中删除重复项