一般来说,只有可以扁平化为普通查询的管道运算符($match
, $limit
, $sort
, and $skip
) 将能够使用集合上的索引。这就是原因之一$geoNear
2.4 中添加的运算符必须位于管道的开头。
一旦你改变了文档$project
, $group
, or $unwind
该索引不再有效/可用。
如果您在数组字段上有索引,您仍然可以在$unwind
加快选择要管道的文档,然后使用第二个进一步细化所选文档$match
.
考虑以下文档:
{ tags: [ 'cat', 'bird', 'blue' ] }
索引打开tags
.
如果您只想对以以下开头的标签进行分组b
那么你可以执行如下聚合:
{ pipeline: [
{ $match : { tags : /^b/ } },
{ $unwind : '$tags' },
{ $match : { tags : /^b/ } },
/* the rest */
] }
首先$match
是否使用索引进行粗粒度匹配tags
.
之后的第二场比赛$unwind
将无法使用索引(上面的文档现在是 3 个文档),但可以评估每个文档以过滤掉创建的额外文档(从示例中删除 {tags : 'cat' })。
HTH-罗布。