mongodb应该根据索引插入数据吗?

时间:2016-06-16 19:26:37

标签: mongodb

我想知道mongodb是否应该根据先前配置的索引插入数据后重新排序数据,例如:

按照以下顺序插入数据后:

db.test.insert(_id:1)
db.test.insert(_id:5)
db.test.insert(_id:2)

执行以下搜索:

db.test.find();

我们可以看到结果:

{ "_id" : 1 }
{ "_id" : 5 }
{ "_id" : 3 }

我们知道,默认情况下字段_id有一个索引,这里的问题是为什么执行搜索后结果不会按顺序返回,如下所示?

{ "_id" : 1 }
{ "_id" : 3 }
{ "_id" : 5 }

1 个答案:

答案 0 :(得分:0)

MongoDB索引是单独的数据结构,包含要编制索引的集合部分。在插入期间,索引不会指示存储中文档的顺序。

索引仅用于在搜索中指定排序顺序时进行排序:

db.test.find().sort({ _id: 1 })
{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 5 }

您可以使用explain:

验证索引使用情况
db.test.explain().find().sort({_id:1})
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "so.test",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "$and" : [ ]
                },
                "winningPlan" : {
                        "stage" : "FETCH",
                        "inputStage" : {
                                "stage" : "IXSCAN",
                                "keyPattern" : {
                                        "_id" : 1
                                },
                                "indexName" : "_id_",
                                "isMultiKey" : false,
                                "direction" : "forward",
                                "indexBounds" : {
                                        "_id" : [
                                                "[MinKey, MaxKey]"
                                        ]
                                }
                        }
                },
                "rejectedPlans" : [ ]
        },
        "serverInfo" : {
                "host" : "KSA303096TX2",
                "port" : 27017,
                "version" : "3.0.11",
                "gitVersion" : "48f8b49dc30cc2485c6c1f3db31b723258fcbf39 modules: enterprise"
        },
        "ok" : 1
}