我想知道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 }
答案 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 }