首页 > 解决方案 > 在密码中,返回关系属性中具有最新日期的节点

问题描述

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

(: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”作为结果。

标签: neo4jcypher

解决方案


问题(可能)位于最后一个匹配子句上。我在 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

推荐阅读