问题描述
这是场景。我正在模拟一个住在一个或多个不同地点的人。关系中包括他们搬入时的开始日期(表示为自纪元以来的毫秒数)。
(: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 => {