如果我必须执行一个聚合查询,它可以有第一个 $match 阶段,如下所示:
$match:{
$OR:[query1, query2, query3...]
}
为查询 1、2、3 ... 编写单独的视图,然后编写聚合查询来组合它们会更好(就性能而言)吗?
这可以在聚合查询中执行吗?
都不是,也不是;您不能基于多个视图进行聚合,我认为这不会提高性能。
使用当前形式,您查询集合一次,理想情况下有索引支持查询。如果您要基于多个视图进行聚合,则必须多次查询集合。
从技术上讲,您可以在聚合中查询集合并为其他
$lookup
条件添加 $or
阶段,但由于 $lookup
是更昂贵的阶段之一,这既不会带来更好的性能,也不会如果您或其他人在一段时间后查看聚合管道,会更容易理解。
但是,如果条件仅基于文档的内容(而不是基于当前时间),您可以做的是预先计算
$or
的结果并将其存储在文档的属性中)。您可以创建一个部分索引,仅包含满足条件的文档,以支持聚合并减少索引大小。