2017-10-28 2 views
0

私は開発の改善の一環としてインデックスを作成するMongoDB開発クラスタを持っています。テスト/生産MongoDBクラスタでも、私は同じインデックスを維持したい。MongoDB既存のすべてのインデックスを新しいデータベースに移行する

既存のコレクションのインデックスをすべて取得し、同じコレクションインデックスを新しいデータベースに作成するにはどうすればよいですか?モンゴシェルから

答えて

1

、あなたがインデックスに

ステップ1を収集したい場所からデータベースに切り替える:スクリプトスクリプト以下

> use my_existing_db

以下の既存のDBと実行するようにスイッチがすべてをループコレクションごとにrun commandを収集し、構成します。新しいDBに切り替え、runCommandsを実行します。

var database = ‘my_new_db' // SHOULD ALWAYS MATCH DESTINATION DB NAME 
db.getCollectionNames().forEach(function(collection){  
    var command = {} 
    var indexes = []  
    idxs = db.getCollection(collection).getIndexes()   
    if(idxs.length>1){ 
     idxs.forEach(function(idoc){ 
      if(idoc.name!='_id_'){ 
       var ns = database+"."+idoc.ns.substr(idoc.ns.indexOf('.') + 1) 
       idoc.ns = ns 
       indexes.push(idoc) 
      } 
     })   
     command['createIndexes'] = collection 
     command['indexes'] = indexes   
     print('db.runCommand(') 
     printjson(command)  
     print(')') 
    } 
}) 

スクリプトは、各コレクション

ステップ2のためのrunCommand関数年代を出力します。完了、乾杯!

> use my_new_db

runCommandsは次のようなものになります。すべてのコマンドをワンショットで実行できます。

db.runCommand(
{ 
    "createIndexes" : "foo", 
    "indexes" : [ 
     { 
      "v" : 2, 
      "key" : { 
       "xy_point" : "2d" 
      }, 
      "name" : "xy_point_2d", 
      "ns" : "my_new_db.foo", 
      "min" : -99999, 
      "max" : 99999 
     }, 
     { 
      "v" : 2, 
      "key" : { 
       "last_seen" : 1 
      }, 
      "name" : "last_seen_1", 
      "ns" : "my_new_db.foo", 
      "expireAfterSeconds" : 86400 
     }, 
     { 
      "v" : 2, 
      "key" : { 
       "point" : "2dsphere" 
      }, 
      "name" : "point_2dsphere", 
      "ns" : "my_new_db.foo", 
      "background" : false, 
      "2dsphereIndexVersion" : 3 
     } 
    ] 
} 
) 
db.runCommand(
{ 
    "createIndexes" : "bar", 
    "indexes" : [ 
     { 
      "v" : 2, 
      "unique" : true, 
      "key" : { 
       "date" : 1, 
       "name" : 1, 
       "age" : 1, 
       "gender" : 1 
      }, 
      "name" : "date_1_name_1_age_1_gender_1", 
      "ns" : "my_new_db.bar" 
     } 
    ] 
} 
) 
関連する問題