mongoimportを使用する場合 ファイルをMongoDBにインポートするには、使用するモードを指定するオプションがあります。これらのモードは、インポートしようとしているコレクションに一致するドキュメントがすでに存在する場合に何が起こるかを決定します。
デフォルトでは、mongoimport insertを使用します モードですが、使用できる他のモードがあります。使用するモードは、何をしようとしているかによって異なります。
以下は、各モードの概要と例です。
モード
mongoimportで使用可能なインポートモード 次のとおりです:
| モード | 説明 |
|---|---|
insert | これはデフォルトのモードです。このモードでは、インポートファイルからドキュメントが挿入されます。一致するドキュメントがコレクションにすでに存在する場合、エラーが発生します。一致するドキュメントとは、同じ一意のID(一致する_idなど)を持つドキュメントです。 フィールド)インポートファイルのドキュメントとして。 |
upsert | データベース内の既存のドキュメントを、インポートファイルの一致するドキュメントに置き換えます。他のすべてのドキュメントが挿入されます。 |
merge | インポートファイル内のドキュメントと一致する既存のドキュメントを新しいドキュメントとマージします。他のすべてのドキュメントが挿入されます。 |
delete | インポートファイル内のドキュメントと一致するデータベース内の既存のドキュメントを削除します。一致しないドキュメントは効果がありません。 |
各モードの仕組みの例を以下に示します。
挿入モード
petsというコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
結局のところ、これらはpets.jsonというファイルにインポートされました。 。
ここで、pets2.jsonという別のJSONファイルがあると想像してください。 、次のJSONドキュメントが含まれています:
{ "_id" : 1, "weight": 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 }
これをpetsにインポートしようとするとどうなりますか 使用中のコレクション(デフォルト)insert モード。
mongoimport --db=PetHotel --collection=pets --file=pets2.json 出力:
2021-01-03T10:07:23.421+1000 connected to: mongodb://localhost/
2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 1 }
2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 2 }
2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 3 }
2021-01-03T10:07:23.423+1000 1 document(s) imported successfully. 3 document(s) failed to import.
そのエラーメッセージによると、4つのドキュメントのうち1つだけがインポートされました。他の3つは、_idに重複するキーがあるためにエラーが発生しました フィールド。
それでは、コレクションを見てみましょう。
db.pets.find() 結果:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
これで、最後のドキュメントが挿入されたことがわかります。以前は_idのドキュメントがなかったため、これは予想されることです。 4の値 。
アップサートモード
upsertを使用するとどうなりますか 同じドキュメントを挿入するモード。
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json 出力:
2021-01-03T10:19:55.400+1000 connected to: mongodb://localhost/ 2021-01-03T10:19:55.444+1000 3 document(s) imported successfully. 0 document(s) failed to import.
出力から、4つのドキュメントのうち3つが正常にインポートされ、失敗はなかったことがわかります。
コレクションを確認しましょう。
db.pets.find() 結果:
{ "_id" : 1, "weight": 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 } 最初の3つのドキュメントがインポートファイルのドキュメントに置き換えられていることがわかります。 4番目のドキュメントは、前回のインポート後と同じままです。
最初のドキュメントのnameが失われていることに注意してください およびtype 田畑。これは、upsertが原因です モードはドキュメント全体を置き換え、置き換えられるドキュメントにはweightのみが含まれます フィールド(および_id 分野)。
マージモード
pets2.jsonを変更してみましょう 次のようにファイルします:
{ "_id" : 1, "name": "Wag", "type": "Dog" }
{ "_id" : 2, "name" : "Fetch" }
{ "_id" : 3, "name" : "Scratch" }
{ "_id" : 4, "name" : "Bubbles" }
{ "_id" : 5, "name" : "Hop", "type": "Kangaroo" }
それでは、mongoimportを実行してみましょう。 もう一度コマンドを実行しますが、今回はmerge モード:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=pets2.json 出力:
2021-01-03T10:32:33.596+1000 connected to: mongodb://localhost/ 2021-01-03T10:32:33.607+1000 3 document(s) imported successfully. 0 document(s) failed to import.
出力によると、3つのドキュメントがインポートされました。
コレクションを見てみましょう。
db.pets.find() 結果:
{ "_id" : 1, "weight" : 40, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
{ "_id" : 5, "name" : "Hop", "type" : "Kangaroo" }
ドキュメント1と2が更新され、ドキュメント5が挿入されたことがわかります。ドキュメント1に関して、weight インポートドキュメントにそのフィールドが含まれていなくても、フィールドは残りました。これは、mergeを使用したためです モード。 upsertを使用した場合 モード(前の例のように)、weight フィールドが消えていたでしょう。
削除モード
deleteを使用する場合 モードでは、一致するドキュメントはすべて削除されます。一致しないドキュメントはコレクションに残ります。
同じドキュメントをインポートするとどうなるか見てみましょう。ただし、今回はdeleteに切り替えます。 モード。
mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json 結果:
2021-01-03T10:39:38.925+1000 connected to: mongodb://localhost/ 2021-01-03T10:39:38.926+1000 5 document(s) deleted successfully. 0 document(s) failed to delete.
コレクション内の5つのドキュメントすべてが削除されました。
アップサートフィールドの変更/秒
--upsertFieldsを使用できます _id以外のフィールドを指定するパラメータ 対戦する。このパラメーターを使用する場合は、フィールドをコンマ区切りのリストとして渡します。
mongoimportがあるかどうかわからない ?
mongoimport MongoDBデータベースツールパッケージの一部です。 MongoDBデータベースツールは、MongoDBを操作するためのコマンドラインユーティリティのスイートです。
MongoDBデータベースツール/mongoimportを使用しているかどうかわからない場合 インストールされている場合は、ターミナルまたはコマンドプロンプトで次のコマンドを実行して確認してください。
mongoimport --version 持っている場合は、バージョン情報などが表示されます。持っていない場合は、MongoDB Webサイトにあるインストール手順を使用して、システムにインストールできます。
mongoimportを実行する場所 コマンド?
mongoimportを実行する必要があります システムのコマンドラインからのコマンド(新しいターミナルやコマンドプロンプトウィンドウなど)。
mongoから実行しないでください シェル。