2016-08-17 14 views
2

コレクションを別のサーバーにコピーして、すべての文書の値を変更する必要があります。コレクションは非常に大きいので、コレクションをコピーしてデータを変更するのではなく、時間を節約するために、ドキュメントを通過する間にドキュメントを挿入する前に値を変更するスクリプトがあるかどうか疑問に思っていましたサーバ。 変更は、フィールドが0のパディングです。例えば文書を変更しながらコレクションを別のサーバーにコピーする方法

出典:SERVER1:27017

db.students:

{"_id" : ObjectId("..."), "sId" : "1234", "grade" : 4 } 
{"_id" : ObjectId("..."), "sId" : "4444", "grade" : 3 } 
{"_id" : ObjectId("..."), "sId" : "5555", "grade" : 5 } 

先:SERVER2:27017

db.students:

{"_id" : ObjectId("..."), "sId" : "00", "grade" : 4 } 
{"_id" : ObjectId("..."), "sId" : "0004444", "grade" : 3 } 
{"_id" : ObjectId("..."), "sId" : "0005555", "grade" : 5 } 

答えて

0

よur Source : server1:27017Destination: server2:27017は2つの異なるサーバーであり、2つの異なる接続が必要です。それらが2つの異なるマシンであることは明らかです。したがって、あるサーバーからデータを取得して変更し、別のサーバーに保存する必要があります。あなたが言及したように、いくつかの先行ゼロを加えるだけで、これは正規表現または単純なjavascript関数を使って行うことができます。

代替アプローチ:あなたは同時に両方のサーバ接続を維持したくない場合は

は、その後、あなたは以下のアプローチのために行くことができます。

1)Destination: server2:27017

mongorestore -d some_other_db -c some_or_other_collection dump/some_collection.bson

3.1にSource : server1:27017

mongodump -d some_database -c some_collection

2)mongorestoreを使用してダンプを復元からmongodumpを使用してコレクションをエクスポート)次に取得するjavascript関数を書きます先頭のゼロですべてのレコードを更新します。

またはこのことから、私たちはここに(同じフィールドを参照ゼロでIDを付けることによって、同じコレクションを更新することはできません。この集計使用$project$concat

3.2)、$out

注)してみてください機能はMongoDBではまだサポートされていません。

SERVER-1765

MongoDB concatenate strings from two fields into a third field

はそれが役に立てば幸いご覧下さい!

+0

ありがとうございました。挿入する前にデータを変更する方法はありますか?私はmongoの輸出入を認識しています。私は時間を節約しようとしています。 –

+0

コレクションが非常に大きいので、DBレイヤー自体で処理してください。tempコレクションのmongodump、mongorestoreを使い、$ project、$ concat、$ outを一緒に使って目的のコレクションとして保存し、最後にtempコレクションを削除します。 –

関連する問題