2016-06-16 58 views
0

我想知道是否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 } 

回答

0

MongoDB索引是獨立的數據結構,它包含被索引的集合部分。該索引不指定插入期間存儲在文檔中的順序。

指標只用於當在搜索中指定了排序順序排序:

 
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 
} 
+0

我沒有這個問題,因爲我有一個:

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

可以使用說明驗證索引的使用收集與5GB的數據,當我嘗試使用排序命令的數據庫範圍,因爲所有內存availabe被消耗,並沒有更多的可用來執行排序。 – jux