You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArangoDB图中查询关联多节点的节点:找关联3个景点的酒店

解决ArangoDB查询关联3个及以上景点的酒店问题

我来帮你搞定这个查询需求!你现在需要找出关联了至少3个不同Attractions节点的Hotels,而当前的查询只是把关联了至少一个景点的酒店都列出来了,还没法筛选数量,对吧?

先分析下你当前查询的问题

你原来的语句是遍历每个景点,然后向外找1-2跳的节点,但这样会把每个酒店和景点的关联关系重复返回,而且没有统计每个酒店关联的景点总数,自然没法筛选出关联3个及以上的结果。

给你两种可行的查询方案

方案1:从酒店出发,统计关联的景点数量

这种方式先遍历所有酒店,再查询每个酒店关联的景点,最后筛选数量达标:

FOR hotel IN Hotels
  // 子查询:找出当前酒店关联的所有景点(注意边的方向,这里假设边是从Attraction指向Hotel,所以用INBOUND;如果反过来就改成OUTBOUND)
  LET connected_attractions = (
    FOR v, e, p IN 1..1 INBOUND hotel GRAPH "LondonAttractionDB"
      FILTER v.entityTypes[0] == "Attraction"
      RETURN v._key // 返回景点的唯一标识,避免重复计数
  )
  // 筛选关联景点数≥3的酒店
  FILTER LENGTH(connected_attractions) >= 3
  // 返回结果,包含酒店信息、关联景点数和具体景点列表
  RETURN {
    hotel_info: hotel,
    associated_attraction_count: LENGTH(connected_attractions),
    associated_attractions: connected_attractions
  }

方案2:从景点出发,分组统计酒店关联数

这种方式从景点入手,把关联的酒店分组,统计每个酒店被多少个景点关联:

FOR attraction IN Attractions
  // 找出当前景点关联的所有酒店(边方向同样根据你的图结构调整)
  FOR hotel IN 1..1 OUTBOUND attraction GRAPH "LondonAttractionDB"
    FILTER hotel.entityTypes[0] == "Hotel"
  // 按酒店分组,统计关联的景点数量
  COLLECT hotel_key = hotel._key, hotel_details = hotel WITH COUNT INTO attraction_count
  // 筛选关联数≥3的酒店
  FILTER attraction_count >= 3
  RETURN {
    hotel_info: hotel_details,
    associated_attraction_count: attraction_count
  }

关键注意点

  • 边的方向:一定要根据你图中实际的边关系调整INBOUND/OUTBOUND。比如如果你的边是Hotel -> Attraction(酒店关联景点),那方案1里就要改成OUTBOUND hotel去查景点;如果是Attraction -> Hotel(景点关联酒店),就用INBOUND hotel。
  • 去重计数:方案1里返回v._key是为了确保即使同一个景点通过多条边关联到酒店,也只会被计数一次;方案2的COLLECT本身会自动去重,因为是按酒店的唯一_key分组的。

内容的提问来源于stack exchange,提问作者Fleur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:16:52