面试题答案
一键面试- 节点建模:
- 创建
User
节点,用于表示用户。例如:
CREATE (:User {name: 'Alice'})
- 创建
- 关系建模:
- 对于好友关系,创建带有时间属性的关系。假设关系类型为
FRIEND_WITH
,可以这样创建关系:
MATCH (a:User {name: 'Alice'}), (b:User {name: 'Bob'}) CREATE (a)-[:FRIEND_WITH {start_time: datetime(), end_time: null}]->(b)
- 这里
start_time
记录关系建立的时间,end_time
初始为null
表示关系未解除。当关系解除时,更新end_time
:
MATCH (a:User {name: 'Alice'})-[r:FRIEND_WITH]->(b:User {name: 'Bob'}) SET r.end_time = datetime()
- 对于好友关系,创建带有时间属性的关系。假设关系类型为
- 查询某个时间点用户的好友列表:
- 假设要查询
Alice
在2023 - 10 - 01T12:00:00Z
这个时间点的好友列表,可以使用如下查询:
MATCH (a:User {name: 'Alice'})-[r:FRIEND_WITH]-(b:User) WHERE r.start_time <= datetime('2023 - 10 - 01T12:00:00Z') AND (r.end_time IS NULL OR r.end_time > datetime('2023 - 10 - 01T12:00:00Z')) RETURN b.name
- 这个查询匹配
Alice
的好友关系,筛选出关系开始时间在指定时间点之前,并且关系结束时间(如果有)在指定时间点之后或者尚未结束(end_time
为null
)的好友节点,并返回好友的名字。
- 假设要查询