Date Neo4J:如何将属性从字符串设置为日期?

Date Neo4J:如何将属性从字符串设置为日期?,date,neo4j,set,cypher,Date,Neo4j,Set,Cypher,我有以下具有此属性的节点: MATCH (a:Person{name:'Raf', birthDay:'05/07/1992'}), (b:Person{name:'Mary', birthDay:'10/08/1991'}), (c:Person{name:'Luke', birthDay:'11/01/1995'}) 如何将生日从字符串格式设置为日期格式? 我怎样才能在考虑生日的情况下对节点进行排序并获得其排名?要做的第一个操作是将生日文本拆分为不同的部分:

我有以下具有此属性的节点:

 MATCH (a:Person{name:'Raf', birthDay:'05/07/1992'}),
       (b:Person{name:'Mary', birthDay:'10/08/1991'}),
       (c:Person{name:'Luke', birthDay:'11/01/1995'})
如何将生日从字符串格式设置为日期格式?
我怎样才能在考虑生日的情况下对节点进行排序并获得其排名?

要做的第一个操作是将生日文本拆分为不同的部分:

RETURN split('05/07/1992', '/') AS parts
将返回一个数组

["05", "07", "1992"]
第二个操作是创建日期对象:

WITH split('05/07/1992', '/') AS parts
RETURN date({day: parts[0], month: parts[1], year: parts[2]})
问题在于,
日、月和年
期望的是整数值,而不是字符串:

WITH [x IN split('05/07/1992', '/') | toInteger(x)] AS parts
RETURN date({day: parts[0], month: parts[1], year: parts[2]})

╒════════════════════════════════════════════════════════╕
│"date({day: parts[0], month: parts[1], year: parts[2]})"│
╞════════════════════════════════════════════════════════╡
│"1992-07-05"                                            │
└────────────────────────────────────────────────────────┘
现在来看第二个问题,如何按生日排序节点并确定其排名

好的,您可以使用时间戳来代替订单,但是正如您在这个关于日期类型的文档参考中所看到的,它没有epochmills,因此您可以使用datetime代替

全流量:

// Create Persons
CREATE (a:Person{name:'Raf', birthDay:'05/07/1992'}),
       (b:Person{name:'Mary', birthDay:'10/08/1991'}),
       (c:Person{name:'Luke', birthDay:'11/01/1995'})

// Set datetime as dob property

MATCH (p:Person)
WITH p, [x IN split(p.birthDay, "/") | toInteger(x)] AS parts
SET p.dob = datetime({day: parts[0], month: parts[1], year: parts[2]})

// Return younger persons

MATCH (p:Person) RETURN p ORDER BY p.dob.epochMillis DESC

要执行的第一个操作是将生日文本拆分为不同的部分:

RETURN split('05/07/1992', '/') AS parts
将返回一个数组

["05", "07", "1992"]
第二个操作是创建日期对象:

WITH split('05/07/1992', '/') AS parts
RETURN date({day: parts[0], month: parts[1], year: parts[2]})
问题在于,
日、月和年
期望的是整数值,而不是字符串:

WITH [x IN split('05/07/1992', '/') | toInteger(x)] AS parts
RETURN date({day: parts[0], month: parts[1], year: parts[2]})

╒════════════════════════════════════════════════════════╕
│"date({day: parts[0], month: parts[1], year: parts[2]})"│
╞════════════════════════════════════════════════════════╡
│"1992-07-05"                                            │
└────────────────────────────────────────────────────────┘
现在来看第二个问题,如何按生日排序节点并确定其排名

好的,您可以使用时间戳来代替订单,但是正如您在这个关于日期类型的文档参考中所看到的,它没有epochmills,因此您可以使用datetime代替

全流量:

// Create Persons
CREATE (a:Person{name:'Raf', birthDay:'05/07/1992'}),
       (b:Person{name:'Mary', birthDay:'10/08/1991'}),
       (c:Person{name:'Luke', birthDay:'11/01/1995'})

// Set datetime as dob property

MATCH (p:Person)
WITH p, [x IN split(p.birthDay, "/") | toInteger(x)] AS parts
SET p.dob = datetime({day: parts[0], month: parts[1], year: parts[2]})

// Return younger persons

MATCH (p:Person) RETURN p ORDER BY p.dob.epochMillis DESC

我有一个很大的数据库我如何解决这个问题:最大调用堆栈大小exceeded@raf我建议用查询和代码打开一个新的问题(以防从应用程序代码中执行此操作)我有一个很大的数据库如何解决这个问题:最大调用堆栈大小exceeded@raf我建议用查询和代码打开一个新问题(以防从应用程序代码开始)