简体   繁体   English

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

[英]How to use array value in filtering for ArangoDB?

stack overflow community i am relatively new for arango and wants to build an AQL query using two collection please help me stack overflow community 我对 arango 比较陌生,想使用两个集合构建一个 AQL 查询,请帮助我

first collection:- user JSON:- "user_id": "abcd", "program_info": [ { "program_id": 101, } ]第一个集合:- 用户 JSON:- "user_id": "abcd", "program_info": [ { "program_id": 101, } ]

Second collection:- program JSON:- { "program_id":101, "program_name": "test" }第二个集合:- program JSON:- { "program_id":101, "program_name": "test" }


i am building query to get info of program name using both collection if user_id will supplied FOR u IN user FILTER u.user_id =="abcd" FOR p IN program FILTER p.program_id == u.program_info[*].program_id RETURN p.program_name我正在构建查询以使用两个集合获取程序名称的信息,如果 user_id 将提供给用户 FILTER u.user_id =="abcd" FOR p IN program FILTER p.program_id == u.program_info[*].program_id RETURN p .program_name

but i am getting blank [] array please help me但我得到空白 [] 数组请帮助我

The expression u.program_info[*].program_id returns an array with all program_id attributes from the objects in the program_info array.表达式u.program_info[*].program_id返回一个数组,其中包含program_info数组中对象的所有program_id属性。 However, you are comparing this array with the scalar value p.program_id which does match and therefore you get an empty array.但是,您将此数组与确实匹配的标量值p.program_id进行比较,因此您得到一个空数组。 I suppose you want to check if p.program_id is contained in user's program_info .我想您想检查p.program_id是否包含在用户的program_info中。 That could be done like this:可以这样做:

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

However, for better index usability it might even be better to rewrite your query like this (provided you have an index on program_id for the program collection):但是,为了更好的索引可用性,像这样重写查询可能会更好(前提是您在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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM