我可以过滤多个集合吗?

Can I filter multiple collections?

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

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

您的查询所做的是遍历第一个集合的所有文档,并针对每个记录遍历第二个集合。应用的过滤器减少了结果的数量,但这不是您应该采取的方式,因为它非常低效。

您真的想要 return 合并两个集合中的匹配项吗?
(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

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

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

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

如果您只想 return TurmaA 文档,您可以这样做:

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

顺便说一句。我建议调用不同于集合名称的变量,例如t 而不是 Turma 如果有集合 Turma.