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

How to use array value in filtering for ArangoDB?

stack overflow 社区我对 arango 比较陌生,想使用两个 collection 构建一个 AQL 查询请帮助我

第一个 collection :- 用户 JSON :- "user_id": "abcd", “program_info”:[ { "program_id": 101, } ]

第二个 collection :- 程序 JSON :- { “program_id”:101, “program_name”:“测试” }


我正在构建查询以使用 collection 获取程序名称的信息,如果 user_id 将被提供 FOR IN 用户 FILTER u.user_id =="abcd" FOR p IN 程序 过滤器 p.program_id == u.program_info[*].program_id RETURNp.program_name

但我得到的是空白 [] 数组,请帮助我

表达式 u.program_info[*].program_id returns 一个数组,其中包含 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_id 上为 program 集合创建了索引):

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