序章

MongoDBは、最も人気のあるNoSQLデータベースエンジンの1つです。 スケーラブルでパワフル、信頼性が高く、使いやすいことで有名です。 この記事では、MongoDBデータベースをインポートおよびエクスポートする方法を紹介します。

インポートとエクスポートとは、他のソフトウェア製品と互換性のある、人間が読める形式のデータを処理する操作を意味することを明確にする必要があります。 対照的に、バックアップと復元の操作では、MongoDB固有のバイナリデータが作成または使用されます。これにより、データとその特定のMongoDB属性の整合性と整合性が維持されます。 したがって、移行の場合、ソースシステムとターゲットシステムに互換性がある限り、通常はバックアップと復元を使用することをお勧めします。

バックアップ、復元、および移行のタスクは、この記事の範囲を超えています。 詳細については、 Ubuntu 20.04 でMongoDBデータベースをバックアップ、復元、および移行する方法を参照してください。

前提条件

このチュートリアルを完了するには、次のものが必要です。

ステップ1—MongoDBへの情報のインポート

MongoDBへの情報のインポートがどのように機能するかを学ぶために、レストランに関する人気のあるサンプルMongoDBデータベースを使用してみましょう。 .json形式であり、次を使用してダウンロードできます。 wget このような:

  1. wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

ダウンロードが完了すると、次のファイルが作成されます。 primer-dataset.json (12 MBサイズ)現在のディレクトリ。 このファイルからという新しいデータベースにデータをインポートしてみましょう。 newdb と呼ばれるコレクションに restaurants.

使用 mongoimport このようなコマンド:

  1. sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

結果は次のようになります。

Output
2020-11-11T19:37:55.607+0000 connected to: mongodb://localhost/ 2020-11-11T19:37:57.841+0000 25359 document(s) imported successfully. 0 document(s) failed to import

上記のコマンドが示すように、25359個のドキュメントがインポートされました。 と呼ばれるデータベースがなかったので newdb、MongoDBが自動的に作成しました。

インポートを確認しましょう。

新しく作成されたものに接続します newdb データベース:

  1. sudo mongo newdb

これで、に接続されました newdb データベースインスタンス。 プロンプトが変更され、データベースに接続していることを示していることに注意してください。

次のコマンドを使用して、レストランコレクション内のドキュメントをカウントします。

  1. db.restaurants.count()

結果が表示されます 25359、インポートされたドキュメントの数です。 さらに良いチェックのために、次のようなレストランコレクションから最初のドキュメントを選択できます。

  1. db.restaurants.findOne()

結果は次のようになります。

Output
{ "_id" : ObjectId("5fac3d937f12c471b3f26733"), "address" : { "building" : "1007", "coord" : [ -73.856077, 40.848447 ], "street" : "Morris Park Ave", "zipcode" : "10462" }, "borough" : "Bronx", "cuisine" : "Bakery", "grades" : [ { "date" : ISODate("2014-03-03T00:00:00Z"), "grade" : "A", "score" : 2 }, ... ], "name" : "Morris Park Bake Shop", "restaurant_id" : "30075445" }

このような詳細なチェックにより、コンテンツ、エンコーディングなどのドキュメントの問題が明らかになる可能性があります。 json形式は UTF-8 エンコーディングとエクスポートおよびインポートは、そのエンコーディングである必要があります。 jsonファイルを手動で編集する場合は、このことに注意してください。 それ以外の場合は、MongoDBが自動的に処理します。

MongoDBプロンプトを終了するには、次のように入力します exit プロンプトで:

  1. exit

root以外のユーザーとして、通常のコマンドラインプロンプトに戻ります。

ステップ2—MongoDBから情報をエクスポートする

前述したように、MongoDB情報をエクスポートすることで、データを含む人間が読めるテキストファイルを取得できます。 デフォルトでは、情報はjson形式でエクスポートされますが、csv(カンマ区切り値)にエクスポートすることもできます。

MongoDBから情報をエクスポートするには、コマンドを使用します mongoexport. これにより、非常にきめ細かいエクスポートをエクスポートできるため、データベース、コレクション、フィールドを指定したり、エクスポートにクエリを使用したりすることもできます。

シンプルな mongoexport 例として、レストランコレクションをからエクスポートする場合があります。 newdb 以前にインポートしたデータベース。 これは次のように実行できます。

  1. sudo mongoexport --db newdb -c restaurants --out newdbexport.json

上記のコマンドでは、 --db データベースを指定するには、 -c コレクションと --out データが保存されるファイルの場合。

成功の出力 mongoexport 次のようになります。

Output
2020-11-11T19:39:57.595+0000 connected to: mongodb://localhost/ 2020-11-11T19:39:58.619+0000 [###############.........] newdb.restaurants 16000/25359 (63.1%) 2020-11-11T19:39:58.871+0000 [########################] newdb.restaurants 25359/25359 (100.0%) 2020-11-11T19:39:58.871+0000 exported 25359 records

上記の出力は、25359個のドキュメントがインポートされたことを示しています。これは、インポートされたドキュメントと同じ数です。

場合によっては、コレクションの一部のみをエクスポートする必要があります。 レストランのjsonファイルの構造と内容を考慮して、ブロンクス区に位置し、中華料理を提供するという基準を満たすすべてのレストランをエクスポートしてみましょう。 MongoDBに接続しているときにこの情報を直接取得する場合は、データベースに再度接続します。

  1. sudo mongo newdb

次に、次のクエリを使用します。

db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )

結果は端末に表示されます。

  1. Output
    2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
  2. 2020-12-03T01:35:25.410+0000 exported 323 records

MongoDBプロンプトを終了するには、次のように入力します exit:

  1. exit

データベースに接続しているときではなく、sudoコマンドラインからデータをエクスポートする場合は、前のクエリを mongoexport コマンドを指定して -q このような議論:

  1. sudo mongoexport --db newdb -c restaurants -q "{\"borough\": \"Bronx\", \"cuisine\": \"Chinese\"}" --out Bronx_Chinese_retaurants.json

円記号で二重引用符をエスケープしていることに注意してください(\)クエリで。 同様に、クエリ内の他の特殊文字をエスケープする必要があります。

エクスポートが成功した場合、結果は次のようになります。

Output
2020-11-11T19:49:21.727+0000 connected to: mongodb://localhost/ 2020-11-11T19:49:21.765+0000 exported 323 records

上記は、323レコードがエクスポートされたことを示しており、 Bronx_Chinese_retaurants.json 指定したファイル。

使用する catless データをスキャンするには:

  1. cat Bronx_Chinese_retaurants.json | less

使用する SPACE データをページングするには:

  1. Output
    date":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],
  2. . . .

プレス q 出る。 これで、MongoDBデータベースをインポートおよびエクスポートできます。

結論

この記事では、MongoDBデータベースとの間で情報をインポートおよびエクスポートするための基本事項を紹介しました。 Ubuntu 20.04 でMongoDBデータベースをバックアップ、復元、および移行する方法については、さらに読むことができます。

レプリケーションの使用を検討することもできます。 レプリケーションを使用すると、障害からマスターサーバーを復元している間、スレーブMongoDBサーバーから中断されることなくMongoDBサービスを実行し続けることができます。 レプリケーションの一部は、操作ログ(oplog)であり、データを変更するすべての操作を記録します。 MySQLのバイナリログを使用するのと同じように、このログを使用して、最後のバックアップが行われた後にデータを復元できます。 バックアップは通常夜間に行われることを思い出してください。夕方にバックアップを復元する場合は、最後のバックアップ以降のすべての更新が失われます。