在密码中,在关系属性中返回具有最新日期的节点

问题描述

这是场景。我正在模拟一个住在一个或多个不同地点的人。关系中包括他们搬入时的开始日期(表示为自纪元以来的毫秒数)。

(:person{name:'bill'}) -[:livesAt {since:1111000}]->(:place{name:'apartmentA'})

(:person{name:'bill'}) -[:livesAt {since:2222000}]->(:place{name:'apartmentB'})

我想编写一个查询,返回与给定人员最近居住地对应的单个地点节点。最近的位置对应于关系的“since”属性中的最大值。请注意,同一地点可能住着多人。

我正在尝试这样的事情:

MATCH (n:person {name: 'bill'})-[r:livesAt]->(m:place)
WITH r
ORDER BY r.since DESC
LIMIT 1
MATCH (n:person)-[r]->(o:place)
RETURN o.name

如果我的查询适用于上面的示例,我希望返回“apartmentB”作为结果。

解决方法

问题(可能)出在最后一个匹配子句上。我在 Neo4j SandBox 上测试了一个更简单的版本,看起来不错:

MATCH (n:person {name: 'bill'})-[r:livesAt]->(m:place)
WITH n,m
ORDER BY r.since DESC
LIMIT 1
RETURN m.name as place,n.name as person
,

或者,您可以使用 max 子句获取关系的最大值,然后找到与最近住所对应的节点。

client.on('guildMemberAdd',member => {