我应该在MongoDB更新命令中具体说明,以提高性能?

问题描述 投票:2回答:1

我对用猫鼬执行updateMany命令时应该在where查询中指定什么感到很好奇。

例如,给出此更新操作:{ $pull: { tags: { $in: ["tagone", "tagtwo"] } } }

查询应该在哪里:

[{organisation: "fffffff..."}{organisation: "fffffff...", tags: {$in: ["tagone", "tagtwo"]}

在where查询中额外的特异性会提高还是降低性能,或者没有区别?

(无数据库索引适用)

mongodb mongoose query-performance
1个回答
1
投票

我将介绍一些我所知道的东西,如果有任何增强,请更新此内容:

1]好吧,如果您没有指定过滤器且没有索引,请以这种方式思考-然后查询将遍历集合中的所有文档,并查找tags数组中输入数组中传递的值并将其拉出值(如果它们存在于tags中)。每个文档tags数组都必须搜索值。

2)如果您有一个过滤器-即使那样,因为您没有启用任何索引,因此查询必须扫描集合中的所有文档,它们都是collection scan,然后它将遍历过滤后的文档(与提供的过滤器匹配的文档)并更新tags数组。

为什么我们需要集合中的索引和查询中的过滤器?]

首先,为什么要在不应用索引的情况下进行操作?每个集合都必须正确索引。

迭代内存中的索引键(索引字段的值)并从磁盘中获取实际文档,更新这些文档并使用索引将其写回将会很快,另一方面,使用过滤器将使查询运行在更少的文档或索引键中(如果已建立索引)在以后的阶段处理文档的任何更新或汇总时的任何转换。

© www.soinside.com 2019 - 2024. All rights reserved.