AQL:找到所有名字出现不止一次并且是美国人的人
AQL: Find all persons whose name occurs more than once and who are American
在 ArangoDB 中,我有一个集合 'people'。每个人都有姓名和国籍。
我如何找到所有名字出现不止一次的美国人的钥匙?
我可以运行 分别查询。
选择名字出现不止一次的所有人:
FOR p IN people
LET key = p._key
COLLECT p.name INTO groups KEEP key
FILTER LENGTH(groups) >= 2
LET group = groups[*].key
RETURN group
选择所有美国人:
FOR p IN people
FILTER p.nationality == 'American'
RETURN p._key
但我不知道如何将这两者结合起来。问题是我需要在 之后过滤国籍,检查名称是否不唯一(因为可能有美国 John Smith 和英国 John Smith)。
然而,COLLECT 语句创建了一个列表列表,我不知道如何正确过滤它。
起初,查询名字出现不止一次的人对我不起作用。需要修改为:
FOR p IN people
LET key = p._key
COLLECT name = p.name INTO groups KEEP key
FILTER LENGTH(groups) >= 2
LET group = groups[*].key
RETURN group
然后,为了对 AQL 查询进行分组,您可以将它们放在彼此后面(将其视为嵌套查询)。和 select 从第一个使用名称(例如组)。但是您需要删除 'KEEP key',因为如果国籍字段不存在,您将无法从查询中 select。
FOR p IN people
LET key = p._key
COLLECT name = p.name INTO groups
FILTER LENGTH(groups) >= 2
FOR p2 IN groups
FILTER p2.p.nationality == 'American'
RETURN p2
这个对我有用,如果有 3 个约翰和 2 个美国人,我只得到这 2 个美国人。
同样,如果您只想返回 nkey,请使用 LET 语句来过滤必填字段。然后看起来像:
FOR p IN people
LET key = p._key
COLLECT name = p.name INTO groups
FILTER LENGTH(groups) >= 2
FOR p2 IN groups
FILTER p2.p.nationality == 'American'
LET key=p2.p._key
RETURN key
在 ArangoDB 中,我有一个集合 'people'。每个人都有姓名和国籍。 我如何找到所有名字出现不止一次的美国人的钥匙?
我可以运行 分别查询。 选择名字出现不止一次的所有人:
FOR p IN people
LET key = p._key
COLLECT p.name INTO groups KEEP key
FILTER LENGTH(groups) >= 2
LET group = groups[*].key
RETURN group
选择所有美国人:
FOR p IN people
FILTER p.nationality == 'American'
RETURN p._key
但我不知道如何将这两者结合起来。问题是我需要在 之后过滤国籍,检查名称是否不唯一(因为可能有美国 John Smith 和英国 John Smith)。 然而,COLLECT 语句创建了一个列表列表,我不知道如何正确过滤它。
起初,查询名字出现不止一次的人对我不起作用。需要修改为:
FOR p IN people
LET key = p._key
COLLECT name = p.name INTO groups KEEP key
FILTER LENGTH(groups) >= 2
LET group = groups[*].key
RETURN group
然后,为了对 AQL 查询进行分组,您可以将它们放在彼此后面(将其视为嵌套查询)。和 select 从第一个使用名称(例如组)。但是您需要删除 'KEEP key',因为如果国籍字段不存在,您将无法从查询中 select。
FOR p IN people
LET key = p._key
COLLECT name = p.name INTO groups
FILTER LENGTH(groups) >= 2
FOR p2 IN groups
FILTER p2.p.nationality == 'American'
RETURN p2
这个对我有用,如果有 3 个约翰和 2 个美国人,我只得到这 2 个美国人。 同样,如果您只想返回 nkey,请使用 LET 语句来过滤必填字段。然后看起来像:
FOR p IN people
LET key = p._key
COLLECT name = p.name INTO groups
FILTER LENGTH(groups) >= 2
FOR p2 IN groups
FILTER p2.p.nationality == 'American'
LET key=p2.p._key
RETURN key