sql >> データベース >  >> NoSQL >> MongoDB

MongoDBにファイルをインポートするときにドキュメントをマージする方法

    mongoimportを使用する場合 ファイルをMongoDBにインポートするには、既存のドキュメントをインポートするドキュメントとマージするオプションがあります。

    この場合、インポートされたドキュメントが同じ_idを持っている場合 インポート先のコレクション内の既存のドキュメントとしての値の場合、既存のドキュメントはインポートされるドキュメントとマージされます。

    別のフィールド(_id以外)を指定することもできます フィールド)必要に応じて一致するフィールドになります。

    ドキュメントをマージすると、結果のドキュメントは既存のデータをインポートされたファイルにある新しいデータと結合します。同じデータはすべて同じままです。競合するデータがあると、インポートされたファイルのデータが既存のデータを上書きします。インポートされたドキュメントにMongoDBコレクションの対応するドキュメントにあるフィールドが含まれていない場合、そのフィールドはコレクション内で変更されません(つまり、削除または変更されません)。

    ドキュメントをmongoimportとマージする方法 mergeを使用することです モード。

    petsというコレクションがあるとします。 次のドキュメントが含まれています:

    db.pets.find()

    結果:

    { "_id" : 1, "name" : "Wag", "type" : "Dog" }
    { "_id" : 2, "name" : "Bark", "type" : "Dog" }
    { "_id" : 3, "name" : "Meow", "type" : "Cat" }

    そして、pets.jsonというJSONファイルがあります。 :

    {"_id":2.0,"name":"Fetch","type":"Dog","weight":40.0}
    {"_id":3.0,"weight":10.0}
    {"_id":4.0,"name":"Hop","type":"Kangaroo","weight":60.0}

    次のコマンドは、JSONファイルをコレクションにインポートします。

    mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json

    これはmergeを使用します 一致するドキュメントをインポートされたドキュメントとマージするモード。

    結果を確認する

    コレクションを見てみましょう。

    db.pets.find()

    結果:

    { "_id" : 1, "name" : "Wag", "type" : "Dog" }
    { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 }
    { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 }
    { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }

    ドキュメント1は変更されておらず、ドキュメント2の名前フィールドがFetchに変更されていることがわかります。 、およびweightもあります フィールドが追加されました。ドキュメント3にもウェイトフィールドが追加され、ドキュメント4が挿入されました。

    アップサートフィールドの変更/秒

    --upsertFieldsを使用できます _id以外のフィールドを指定するパラメータ 対戦する。このパラメーターを使用する場合は、フィールドをコンマ区切りのリストとして渡します。

    pets2.jsonという別のJSONファイルがあるとします。 インポートしたいのですが、次のようになります:

    {"name":"Wag","type":"Dog","weight":20.0,"gooddog":true}
    {"name":"Bubbles","type":"Fish"}

    このドキュメントには_idは含まれていません したがって、各ドキュメントを一意に識別する他のフィールドと照合する必要があります。この場合、nameを使用できます およびtype 田畑。

    したがって、次のmongoimportを使用できます。 コマンド:

    mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json

    それでは、コレクションをもう一度確認しましょう:

    db.pets.find()

    結果:

    { "_id" : 1, "name" : "Wag", "type" : "Dog", "gooddog" : true, "weight" : 20 }
    { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 }
    { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 }
    { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
    { "_id" : ObjectId("5ff0548dd991410169412300"), "name" : "Bubbles", "type" : "Fish" }

    Wagが更新されたことがわかります(ただし、_id 値は同じままです)。

    一方、バブルはアップサートフィールドに一致しなかったため、挿入されました。

    mongoimportを確認します

    mongoimport MongoDBデータベースツールパッケージの一部です。 MongoDBデータベースツールは、MongoDBを操作するためのコマンドラインユーティリティのスイートです。

    MongoDBデータベースツール/mongoimportを使用しているかどうかわからない場合 インストールされている場合は、ターミナルまたはコマンドプロンプトで次のコマンドを実行して確認してください。

    mongoimport --version

    持っている場合は、バージョン情報などが表示されます。持っていない場合は、MongoDB Webサイトにあるインストール手順を使用して、システムにインストールできます。

    コマンドを実行する場所

    mongoimportを実行する必要があることを忘れないでください システムのコマンドラインからのコマンド(新しいターミナルやコマンドプロンプトウィンドウなど)。

    mongoから実行しないでください シェル。


    1. Max Attempts Exceeded Exception queuelaravel

    2. 明示的に名前を付けずにMongoDBの任意のフィールドの値を検索する

    3. Redis `SCAN`:一致する可能性のある新しいキー間のバランスを維持し、最終的な結果を妥当な時間で確保するにはどうすればよいですか?

    4. マングース:CastError:パス_idの値[オブジェクトオブジェクト]のObjectIdへのキャストに失敗しました