ArangoDB如何合并两个查询以获取顶点关联的所有文档?
合并ArangoDB关联查询的几种方法
当然可以把这两个独立的查询合并成一个,而且有几种不同的实现思路,我来给你详细说明:
方法1:使用子查询直接嵌套
你可以把第一个查询作为子查询嵌入到第二个查询中,直接获取目标spec的_id,不需要手动传递变量。对应的AQL语句如下:
FOR v IN 3 ANY ( FOR doc IN spec FILTER doc.serial_no == "12345abc" RETURN doc._id ) belongs_to RETURN v
注意:我修正了你原查询里
serial_no的引号问题(原查询里多了一层嵌套引号),实际使用时要保证参数格式正确。
这种方式写法紧凑,适合简单的关联查询场景。
方法2:用LET定义变量分步处理
如果想要更清晰的逻辑结构,可以先用LET把找到的spec文档存成变量,再用这个变量的_id去查询关联顶点,可读性会更好:
LET target_spec = ( FOR doc IN spec FILTER doc.serial_no == "12345abc" RETURN doc )[0] // 取第一个匹配的spec文档(假设serial_no是唯一标识) FOR v IN 3 ANY target_spec._id belongs_to RETURN v
如果你的serial_no可能对应多个spec文档,可以去掉[0],改成遍历所有匹配的spec去查关联:
LET target_specs = ( FOR doc IN spec FILTER doc.serial_no == "12345abc" RETURN doc ) FOR spec_doc IN target_specs FOR v IN 3 ANY spec_doc._id belongs_to RETURN v
额外需求:同时返回spec和关联文档
如果需要同时获取原始的spec文档和它关联的顶点,可以在最后返回的时候把两者组合起来:
LET target_spec = ( FOR doc IN spec FILTER doc.serial_no == "12345abc" RETURN doc )[0] LET related_devices = ( FOR v IN 3 ANY target_spec._id belongs_to RETURN v ) RETURN { spec: target_spec, related_devices: related_devices }
内容的提问来源于stack exchange,提问作者cantona_7
相关产品推荐
相关产品推荐

