如何在ArangoDB的过滤中使用数组值?

knpiaxh1  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(138)

堆栈溢出社区我对arango比较陌生,希望使用两个集合构建一个AQL查询,请帮助我
第一个集合:-用户JSON:-“用户标识”:“abcd”,“程序信息”:[ {“程序标识”:101、} ]
第二个集合:-程序JSON:- {“程序标识”:101,“程序名称”:“测试”}
我正在构建查询以使用两个集合获取程序名的信息,如果用户标识将被提供用于u IN用户过滤器u.用户标识==“abcd”用于p IN程序过滤器p.程序标识== u.程序信息[*].程序标识返回p.程序名
但是我得到的是空的[]数组请帮助我

ymdaylpp

ymdaylpp1#

表达式u.program_info[*].program_id返回一个数组,其中包含program_info数组中对象的所有program_id属性。然而,您将该数组与标量值p.program_id进行比较,结果得到一个空数组。我想您需要检查p.program_id是否 * 包含 * 在用户的program_info中。可以这样做:

FOR u IN user
  FILTER u.user_id =="abcd"
  FOR p IN program
    FILTER p.program_id IN u.program_info[*].program_id
    RETURN p.program_name

但是,为了更好地使用索引,最好将查询重写为如下形式(前提是您在program集合的program_id上有一个索引):

FOR u IN user
  FILTER u.user_id =="abcd"
  FOR pid IN u.program_info[*].program_id
    FOR p in program
      FILTER p.program_id == pid
      RETURN p.program_name

相关问题