gpt4 book ai didi

mongodb - 聚合管道和索引

转载 作者:行者123 更新时间:2023-12-02 04:14:29 24 4
gpt4 key购买 nike

来自http://docs.mongodb.org/manual/core/indexes/#multikey-indexes ,可以使用多键索引在数组字段上创建索引。 http://docs.mongodb.org/manual/applications/aggregation/#pipeline-operators-and-indexes列出了如何在聚合框架中使用索引的一些方法。但是,有时我可能需要在数组字段上执行 $unwind 才能执行 $group。我的问题是,多键索引(或任何使用此类数组字段的索引)在管道中间进行操作后是否仍然可以使用?

最佳答案

通常,只有可以扁平化为普通查询的管道运算符($match$limit$sort >$skip) 将能够使用集合上的索引。这是 2.4 中添加的 $geoNear 运算符必须位于管道开头的原因之一。

一旦您使用 $project$group$unwind 更改文档,索引就不再有效/可用。

如果您在数组字段上有索引,您仍然可以在 $unwind 之前使用它来加速选择要管道的文档,然后使用第二个 进一步细化所选文档$匹配

考虑以下文档:

{ tags: [ 'cat', 'bird', 'blue' ] }

标签上有索引。

如果您只想对以 b 开头的标签进行分组,那么您可以执行如下聚合:

{ pipeline: [
{ $match : { tags : /^b/ } },
{ $unwind : '$tags' },
{ $match : { tags : /^b/ } },
/* the rest */
] }

第一个 $match 使用 tags 上的索引进行粗粒度匹配。

$unwind 之后的第二个匹配将无法使用索引(上面的文档现在是 3 个文档),但可以评估每个文档以过滤掉获得的额外文档创建(从示例中删除 { tags : 'cat' })。

HTH - 罗布。

关于mongodb - 聚合管道和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15606963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com