我可以过滤多个集合吗?
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
.
我想过滤多个集合,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
.