如何在ArangoDB图中查询指定结构的Attraction与Hotel节点组合?
解决ArangoDB图结构精准匹配问题
你需要的是严格匹配四节点的特定路径结构:起始景点(A1)→景点(A2)→酒店(H),同时起始景点A1还得指向另一个独立的景点(A3)。你之前的查询返回部分匹配结果,是因为没有对节点类型、路径长度和额外的邻居关系做精准约束。
我给你写一个针对性的查询语句,一步步帮你锁定目标结构:
FOR A1 IN Attraction # 先收集A1所有直接指向的Attraction节点 LET connectedAttractions = ( FOR neighbor IN 1..1 OUTBOUND A1 GRAPH '你的图名称' FILTER neighbor._type == 'Attraction' RETURN neighbor ) # 确保A1至少有2个Attraction邻居(满足"A1还指向另一个Attraction"的要求) FILTER LENGTH(connectedAttractions) >= 2 # 遍历A1的每个Attraction邻居,找那些能连到Hotel的节点A2 FOR A2 IN connectedAttractions LET connectedHotels = ( FOR hotel IN 1..1 OUTBOUND A2 GRAPH '你的图名称' FILTER hotel._type == 'Hotel' RETURN hotel ) # 确保这个A2确实有指向Hotel的边 FILTER LENGTH(connectedHotels) > 0 # 遍历A2连接的每个Hotel FOR H IN connectedHotels # 从A1的Attraction邻居里挑出不是A2的那个(也就是A3) LET A3 = FIRST( FOR a IN connectedAttractions FILTER a != A2 RETURN a ) # 返回完整的四节点组合 RETURN { startAttraction: A1, toHotelAttraction: A2, targetHotel: H, extraAttraction: A3 }
关键逻辑说明:
- 先用
connectedAttractions收集A1的所有直接景点邻居,通过LENGTH(connectedAttractions) >=2确保A1满足"还指向另一个Attraction"的条件 - 对每个A1的邻居A2,检查它是否能连接到Hotel,过滤掉不符合的A2
- 最后从A1的邻居中排除A2,得到额外的景点A3,确保返回的是完整的四节点结构
这个查询只会返回完全符合你要求的节点组合,不会再出现部分匹配的结果。
内容的提问来源于stack exchange,提问作者Fleur
相关产品推荐
相关产品推荐

