场景:有一个关于分类记录collection,分类name(string,中文,英文,数字等组成)字段上有索引方便快速筛选某个分类记录,现在查询出来需要排序,查询条件{name:"F1"},排序条件{_id:-1}
mongodb查询explain分析,这是winningPlan
{"stage": "SORT", "planNodeId": 3, "sortPattern": { "_id": 1 }, "memLimit": 104857600, "limitAmount": 5, "type": "simple", "inputStage": { "stage": "FETCH", "planNodeId": 2, "inputStage": { "stage": "IXSCAN", "planNodeId": 1, "keyPattern": { "name": -1 }, "indexName": "name_-1", "isMultiKey": false, "multiKeyPaths": { "name": [] }, "isUnique": false, "isSparse": false, "isPartial": false, "indexVersion": 2, "direction": "forward", "indexBounds": { "name": ["[\"F1\", \"F1\"]"] } } }
SORT + FETCH + IXSCAN 这算不算bad查询,通常是FETCH + IXSCAN。
这个查询并不算bad,因为它使用了正确的索引并且避免了全表扫描。
IXSCAN
阶段是 MongoDB 使用索引来扫描集合的阶段。在这个查询中,MongoDB 使用名为 "name_-1" 的索引来查找 name
字段值等于 "F1" 的文档。这是由 indexBounds
参数确定的,它表示索引的范围是 ["F1", "F1"],即索引键的值等于 "F1"。
接下来是 FETCH
阶段,这是 MongoDB 获取在 IXSCAN
阶段中选择的文档的阶段。在这个阶段,MongoDB 获取所有匹配的文档,而不考虑它们在集合中的顺序。
最后是 SORT
阶段,这个阶段对 FETCH
阶段返回的文档进行排序。在这个查询中,SORT
阶段按照 _id
字段降序排序文档。
通常,查询优化的目标是尽量避免全表扫描(即没有使用索引的情况)。在这个查询中,通过使用索引,MongoDB 没有进行全表扫描,因此这个查询是有效的。
另外,查询中的 LIMIT
和 OFFSET
子句表示只返回排序后的前五个文档。由于查询结果只有五个文档,所以 MongoDB 没有执行额外的 FETCH
阶段来获取更多的文档。
总之,这个查询是有效的,因为它使用了正确的索引并且避免了全表扫描。尽管它涉及到多个阶段,但是每个阶段都有其明确的用途,并且整个查询的执行效率高。
主要内容:$explain,$hint查询分析是衡量数据库和索引设计有效性的一个非常重要的方式。下面我们来介绍一下比较常用的 $explain 和 $hint 查询。 $explain $explain 运算符提供了有关查询、索引使用以及查询统计的相关信息,这在索引优化方面非常有用。《 MongoDB覆盖索引查询》一节中我们已经使用以下代码在 users 集合中的 gender 和 name 字段上的创建了索引: 在 mongo sh
我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。
问题内容: 我有一个博客系统,可将上传的文件存储到GridFS系统中。问题是,我不知道如何查询它! 我将Mongoose与尚未支持GridFS的NodeJS一起使用,因此我将实际的mongodb模块用于GridFS操作。没有SEEM可以像常规集合中的文档一样查询文件元数据。 将元数据存储在指向GridFS objectId的文档中是否明智?可以轻松查询? 任何帮助将不胜感激,我有点卡住了:/ 问题
我在MongoDB中有以下表单的集合。正如您所看到的,有些文档有两个成员“id”和“xid”,而有些文档只有1个“id”(除了对象_id之外) 我想创建一个mongoexport语句,它将ID和xid值都>0的文档导出到仅csv的文档
例如,我在MongoDB中有以下数据: 现在我想查询“SUM传入的数量在11 - 12之间”(结果应该是500),我如何使用Mongo Shell来做到这一点?
问题内容: 我希望从我的用户模型中检索一些信息,如下所示: 在主页中,我有一个 位置 过滤器,您可以在其中浏览来自国家或城市的用户。 所有字段还包含其中的用户数: 在主页上,然后我还有“学生和老师”页面,我希望仅提供有关这些国家和城市有多少老师的信息… 我想做的是创建一个对MongoDB的查询,以通过单个查询检索所有这些信息。 此刻查询如下: 问题是我不知道如何获取所需的所有信息。 我不知道如何获