如何在 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
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