【问题标题】:Arangodb: bikes filtered by timestamp and coordinatesArangodb:按时间戳和坐标过滤的自行车
【发布时间】:2020-10-17 16:11:09
【问题描述】:

我有这样的数据结构:

红色顶点是位置 青色顶点是 BIKE 粉红色的顶点是 USER

GRAPH TD

((BIKE)) -- LOCATED -->((POSITION))

其中 BIKE 是一个与多个 POSITION 相关联的位置

每个位置都有经纬度属性和时间戳

我想查找位置在坐标对附近 40 公里处的所有自行车,不超过 48 小时

到目前为止,我正在做的是:

FOR pos IN NEAR(positions, 45.5063575, 9.24157653499384, 40, "distance")
        FILTER pos.timestamp >= DATE_SUBTRACT(DATE_NOW(), "PT48H")
        SORT pos.timestamp DESC, pos.distance DESC
        RETURN {'position': pos,'bike':(FOR bike IN OUTBOUND pos located RETURN  bike)}

但是这个查询返回了他们的自行车的所有位置,我想要最后一个位置(时间上最近的)和所属的自行车

感谢您的帮助

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    你需要这样的东西:

    FOR pos IN WITHIN(positions, 45.5063575, 9.24157653499384, 40, "distance")
      FILTER pos.timestamp >= DATE_SUBTRACT(DATE_NOW(), "PT48H")
      SORT pos.timestamp DESC
      FOR b IN OUTBOUND pos located
        COLLECT bike = b INTO bike_positions
        RETURN {'bike': bike, 'position': bike_positions[0].pos}
    

    注意:您应该使用WITHIN 而不是NEAR

    更新@Loki 评论后:

    FOR pos IN positions
      FILTER pos.timestamp >= DATE_SUBTRACT(DATE_NOW(), "PT200H") AND 
             GEO_DISTANCE([45.47942614827045, 9.24157653499384], pos.coordinates)
      SORT pos.timestamp DESC     
      FOR b IN OUTBOUND pos located
        COLLECT bike = b INTO bike_positions
        RETURN {'bike': bike, 'position': bike_positions[0].pos}
    

    【讨论】:

    • 因为 WITHIN 已被弃用 (arangodb.com/docs/stable/aql/functions-geo.html#within) 我尝试使用 DISTANCE() 重写查询。 FOR pos IN positions FILTER pos.timestamp >= DATE_SUBTRACT(DATE_NOW(), "PT200H") LET d = DISTANCE(pos.coords.latitude, pos.coords.longitude, 45.47942614827045, 9.24157653499384) FILTER d <= 40 SORT d ASC FOR b IN OUTBOUND pos located COLLECT bike = b INTO bike_positions RETURN {'bike': bike, 'position': bike_positions[0].pos}。你怎么看?
    • 在新的表示法中,将 GEO_DISTANCE 与地理索引一起使用可能会更好。我会用那个例子更新我的答案
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2021-07-09
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    相关资源
    最近更新 更多