mongodb - 当每个字段都可搜索和可排序时,如何在 MongoDB 上正确构建索引?

标签 mongodb mongoose mongodb-query aggregation-framework

我正在设计一个 MongoDB 集合,其中包含 5000 万个文档,文档中的每个字段都可以搜索和排序。搜索和排序逻辑将从前端发送,因此可能是很多字段搜索和排序组合。我做了一些测试并得出结论,当仅在索引字段中搜索和排序时,查询运行得非常快,但是当搜索或排序非索引字段时,查询运行得非常慢。

考虑到会有很多可能的搜索/排序组合,在这种情况下如何在此集合中构建索引以获得更好的性能?

最佳答案

索引的代价是额外的内存空间以及可能增加数据库写入(插入和更新)操作的执行时间。然而,正如您正确指出的那样,索引使数据库读取(和排序)变得非常快。

创建索引既简单又直接,但是,您需要考虑权衡,大多数时候,这通常是文档中字段的读写比率。

如果您经常从一个非常大的集合中读取(或排序)文档(例如您提到的 5000 万个示例),那么为用于识别(或排序)文档的所有字段添加索引非常有意义,您只需要确保数据库中的内存空间不会耗尽。不对字段建立索引会非常令人沮丧,试想一下,如果您需要通过未建立索引的字段获取最后一个文档,则必须搜索 49,999,999 个文档才能找到它。

我希望这会有所帮助。

关于mongodb - 当每个字段都可搜索和可排序时,如何在 MongoDB 上正确构建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58510106/

相关文章:

node.js - mongoose findOne() 不是一个函数

node.js - Mongoose - 使用单个集合的多个模式

javascript - 在 MongoDB 中使用异步/等待时,在应用游标方法之前获取文档总数?

node.js - 有没有办法在动态嵌入对象上使用聚合或 $sum ?

mongodb - $split 并返回 mongodb 查询中的第一个数组元素

c# - MongoDB C# 驱动程序 : connection string for sharding over replica set

Javascript 使用另一个变量的值来选择和使用对象

java - 使用 Java Spring 连接到 MongoDB 3.0

javascript - 从 Node.js 向 MongoDB 集合插入不同类型的值

node.js - 了解 Azure Function 中的 Mongoose 连接