我想过滤多个集合,只返回有这些要求的文档,问题是当一个集合中有多个匹配值时,重复显示的元素。
FOR TurmaA IN TurmaA
FOR TurmaB IN TurmaB
FILTER TurmaA.Disciplinas.Mat >10
FILTER TurmaB.Disciplinas.Mat >10
RETURN {TurmaA,TurmaB}
您的查询所做的是迭代第一个集合的所有文档,并为每个记录迭代第二个集合。应用的过滤器减少了结果的数量,但这不是你应该如何去做的,因为效率非常低。
你真的想要从两个集合中返回匹配的联合吗?
(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。我建议调用与集合名称不同的变量,例如如果有一个集合t
,Turma
而不是Turma
。