首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4J Cypher -查找整数属性

Neo4J Cypher -查找整数属性
EN

Stack Overflow用户
提问于 2021-06-23 13:41:13
回答 1查看 265关注 0票数 1

背景

我有一些节点已经记录了一个特定的属性,并且我希望它们被记录为INT --我已经修改了系统的输入代码,现在将它们记录为INT,但是我希望检查Neo4J是否有异常。

数据

我现在有了一个混合数据,其中一些是作为"int“创建的,有些是作为STR创建的,有些甚至是空的(在我的数据结构中是可以的)。

代码语言:javascript
运行
复制
CREATE (n:logs{value: "example", records: "30"})
    , (n:logs{value: "example", records: 30})
    , (n:logs{value: "example", records: null})
RETURN n

问题

我试图验证系统现在是否将“记录”属性写成INT而不是字符串,所以我尝试了以下查询;

代码语言:javascript
运行
复制
WITH datetime("2021-06-18T06:00:00").epochMillis AS threshold
MATCH(n:logs)
WHERE n.records <> tointeger(n.records)
COUNT(n)

由于某种原因,这将返回1-我的空记录。但不是STR,正如我所预料的。

然后尝试如下(6月18日是我的输入系统更新的日期);

代码语言:javascript
运行
复制
WITH datetime("2021-06-18T06:00:00").epochMillis AS threshold
MATCH(n:logs)
WHERE n.records = tointeger(n.records)
COUNT(n)

它返回0--这也是我不知道为什么。

所以我的问题是,我做错了什么,我怎样才能到达我需要去的地方。最终是这样的;

forwards

  • Change
  1. 检查系统是否保存为INT,将所有已存在的记录从STR保存到INT.

我想第二条应该是

代码语言:javascript
运行
复制
MATCH(n:logs)
WHERE n.records <> tointeger(n.records)
SET n.records = tointeger(n.records)

其他信息

edition

  • Version X.x.x
  • 无加载项
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-23 15:44:37

要更新为整数的查询是正确的。

为了澄清您的假设,请在您的neo4j桌面或浏览器中运行以下查询,您将看到发生了什么。

代码语言:javascript
运行
复制
 1. RETURN toInteger("2021-06-18T06:00:00")

 2. RETURN toInteger(null)

它们都将返回NULL。这意味着你下面的说法是不正确的。

由于某种原因,

返回1-我的空记录。但不是STR,正如我所预料的。

您确实返回了1,但这是记录的字符串值('30')而不是空值。

然后当您在下面运行查询时

,其中n.records =to整数(n.records)并返回0--这也不知道为什么。

这是因为字符串日期类型的整数值也是空的。因此,它将不返回匹配的记录。

如果希望计数所有具有非整数属性的节点,包括空值,则可以在查询下面运行。

代码语言:javascript
运行
复制
MATCH(n:logs)
WHERE n.records <> tointeger(n.records) OR n.records is null
RETURN count(distinct n) as cnt

Result:  2

请记住,如果n.records = "2021-06-18T06:00:00“,则需要将其转换为一个时代值(时间的整数值(秒或自1970年1/1/1970以来的millis )。如果不是,则not整型(n.records)为null,在查询中将不匹配。

如下所示:

代码语言:javascript
运行
复制
MATCH (n:logs)
WHERE tointeger(n.records) is null
SET n.records = datetime(n.records).epochMillis
RETURN n

然后执行原始查询(这是正确的!),以清除其他非整数值。

代码语言:javascript
运行
复制
MATCH(n:logs)
WHERE n.records <> tointeger(n.records)
SET n.records = tointeger(n.records)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68100990

复制
相关文章

相似问题

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