MST

星途 面试题库

面试题:Neo4j里如何处理随时间变化的关系

假设有一个社交网络场景,用户之间的关系(如好友关系)可能在某个时间点建立,也可能在之后的某个时间点解除。在Neo4j中,你如何对这种随时间变化的关系进行数据建模,以便能够高效地查询某个时间点用户的好友列表?
43.1万 热度难度
数据库Neo4j

知识考点

AI 面试

面试题答案

一键面试
  1. 节点建模
    • 创建User节点,用于表示用户。例如:
    CREATE (:User {name: 'Alice'})
    
  2. 关系建模
    • 对于好友关系,创建带有时间属性的关系。假设关系类型为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()
    
  3. 查询某个时间点用户的好友列表
    • 假设要查询Alice2023 - 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_timenull)的好友节点,并返回好友的名字。