首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果节点属性不存在,则使用单个Cypher查询启动并返回该属性

如果节点属性不存在,则使用单个Cypher查询启动并返回该属性
EN

Stack Overflow用户
提问于 2014-12-27 11:36:36
回答 1查看 2.1K关注 0票数 4

我正在寻找一个单一的 Cypher查询,该查询将增加一个整数节点参数并返回该值,同时将其初始化到0,以防它不存在。

类似于下面的伪Cypher:

代码语言:javascript
运行
复制
MATCH (n:Order)
IF n.product_count IS NULL THEN n.product_count = 0 // this line is what I need
SET n.product_count = n.product_count + 1
RETURN n.product_count

我能够将一个查询与完成任务的FOREACH语句组合在一起,但这似乎很麻烦,而且不适合我的用例:

代码语言:javascript
运行
复制
MATCH (n:Order)
WHERE id(n) = 9503
FOREACH ( i in (CASE WHEN n.product_count IS NULL THEN [1] ELSE [] END) | SET n.product_count = 0 )
SET n.product_count = n.product_count + 1
RETURN n.product_count; 

怎么做才是正确的呢?

注意:Order节点非常复杂,包含许多其他属性,因此在这种情况下,MERGE状态是非常不需要的。

EN

Stack Overflow用户

回答已采纳

发布于 2014-12-27 14:07:33

Neo4j为这种情况提供了一个有用的函数,称为coalesce

合并使用任意数量的参数,并返回非空的第一个参数。在所有参数都为空的情况下,它只返回NULL。

因此,例如:

代码语言:javascript
运行
复制
coalesce(NULL, 1) // equates to 1
coalesce("hello", 6) // equates to "hello"
coalesce(NULL, "world", NULL) // equates to "world"
coalesce(NULL, NULL) // equates to NULL

因此,您的查询如下所示:

代码语言:javascript
运行
复制
MATCH (n:Order)
SET n.product_count = coalesce(n.product_count, 0) + 1
RETURN n.product_count

以下是关于合并的正式文档:

http://neo4j.com/docs/stable/query-functions-scalar.html#functions-coalesce

票数 9
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27666841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档