2016-06-16 6 views
0

私はMongoDBのは、例えば、以前に設定したインデックスに応じて挿入データの後に再注文データをすべきかどうかを知りたい:mongodbは、インデックスに従ってデータを挿入する必要がありますか?

挿入データの後怒鳴る配列に応じて:

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

そして、次のコマンドを実行検索:

{ "_id" : 1 } 
{ "_id" : 5 } 
{ "_id" : 3 } 
:我々は結果を見ることができます

db.test.find(); 

私たちが知っているように、フィールド_idはデフォルトでインデックスを持っていますが、検索を実行した後に結果が次のように順番に返されないのはなぜですか?

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

答えて

0

MongoDBインデックスは、インデックスを作成するコレクションの部分を含む個別のデータ構造です。索引は、挿入中にストレージ内の文書の順序を指示しません。

インデックスは唯一のソート順は、検索で指定された場合、ソートのために使用されます。

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

あなたが説明使用してインデックスの使用状況を確認することができます。

 
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

私が持っているので、私はこの質問をしました収集に5GBのデータが含まれていて、ソートコマンドを使用しようとするとデータベースの範囲になります。これはすべてのメモリが消費され、ソートを実行できなくなるためです。 – jux

関連する問題