我可以过滤多个馆藏吗?

问题描述 投票:0回答:1

我想过滤多个集合,只返回有这些要求的文档,问题是当一个集合中有多个匹配值时,重复显示的元素。

FOR TurmaA IN TurmaA
    FOR TurmaB IN TurmaB

FILTER TurmaA.Disciplinas.Mat >10
FILTER TurmaB.Disciplinas.Mat >10

RETURN {TurmaA,TurmaB}

Screenshot of the problem

arangodb aql
1个回答
1
投票

您的查询所做的是迭代第一个集合的所有文档,并为每个记录迭代第二个集合。应用的过滤器减少了结果的数量,但这不是你应该如何去做的,因为效率非常低。

你真的想要从两个集合中返回匹配的联合吗? (SQL中的SELECT ... UNION SELECT ...)。您使用当前方法获得的是两个集合中文档的所有可能组合。我相信你想要的是:

LET a = (FOR t IN TurmaA FILTER t.Disciplinas.Mat > 10 RETURN t)
LET b = (FOR t IN TurmaB FILTER t.Disciplinas.Mat > 10 RETURN t)
FOR doc IN UNION(a, b)
  RETURN doc

两个集合都在子查询中单独过滤,然后组合并返回结果。

另一种解决方案是将所有文档存储在一个集合Turma中,并具有另一个属性,例如: Type的值为"A""B"。然后查询将如下所示:

FOR t IN Turma
  FILTER t.Disciplinas.Mat > 10
  RETURN t

如果您只想返回TurmaA文档,您可以:

FOR t IN Turma
  FILTER t.Disciplinas.Mat > 10 AND t.Type == "A"
  RETURN t

BTW。我建议调用与集合名称不同的变量,例如如果有一个集合tTurma而不是Turma

© www.soinside.com 2019 - 2024. All rights reserved.