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

MongoDBでドキュメントを更新する4つの方法

    MongoDBは、ドキュメントを更新するためのさまざまな方法を提供します。使用する方法は、更新を実行する方法によって異なります。

    この記事では、MongoDBでドキュメントを更新する4つの方法を紹介します。

    db.collection.updateOne() 方法

    db.collection.updateOne() メソッドは、その名前が約束するとおりに機能します。1つのドキュメントを更新します。

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

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

    次のように1つのドキュメントを更新できます:

    db.pets.updateOne( 
        { type: "Dog" },
        { $set: { type: "Cow" } }
        )

    結果:

    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

    2つのドキュメントがフィルター基準(type: "Dog"である基準)に一致する場合でも、1つのドキュメントのみが更新されました。 。

    次のように結果を確認できます:

    db.pets.find()

    結果:

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

    これで、最初のドキュメントにtypeが追加されました CowDogの代わりに 、ただし、2番目のドキュメントは、フィルタリング基準にも一致していても、影響を受けませんでした。

    db.collection.updateMany() 方法

    db.collection.updateMany() メソッドは、コレクションに指定されたフィルターに一致するすべてのドキュメントを更新します。

    元のコレクションドキュメントを使用しましょう:

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

    ここでも、2つのドキュメントにDogがあることがわかります。 typeとして 。

    次のように、両方のドキュメントを一度に更新できます:

    db.pets.updateMany( 
        { type: "Dog" },
        { $set: { type: "Cow" } }
        )

    結果:

    { "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

    これは、2つのドキュメントが一致し、2つが更新されたことを示しています。

    コレクションを確認できます:

    db.pets.find()

    結果:

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

    db.collection.update() 方法

    db.collection.update() メソッドは、コレクション内の単一のドキュメントまたは複数のドキュメントを更新できます。

    デフォルトでは、1つのドキュメントのみが更新されます。ただし、multi: trueの場合 を指定すると、クエリ条件に一致するすべてのドキュメントが更新されます。

    単一のドキュメントを更新する

    元のドキュメントのコレクションをもう一度使用してみましょう:

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

    次のように1つのドキュメントを更新できます:

    db.pets.update( 
        { type: "Dog" },
        { $set: { type: "Cow" } }
        )

    結果:

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    1つのドキュメントのみが更新されました。これは、コレクションをクエリするときに確認されます。

    db.pets.find()

    結果:

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

    複数のドキュメントを更新する

    もう一度元のドキュメントコレクションに戻りましょう:

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

    次に、multi: trueを追加します クエリ条件に一致するすべてのドキュメントを更新するための更新操作:

    db.pets.update( 
        { type: "Dog" },
        { $set: { type: "Cow" } },
        { multi: true }
        )

    結果:

    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) 

    そのため、今回は2つのドキュメントが一致し、更新されました。

    コレクションをもう一度見てみましょう:

    db.pets.find()

    結果:

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

    予想どおり、両方のドキュメントにtypeが追加されました Cowの 。

    db.collection.replaceOne() 方法

    db.collection.replaceOne() メソッドは、フィルターに基づいてコレクション内の単一のドキュメントを置き換えます。

    再び元のコレクションを使用する:

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

    db.collection.replaceOne()を使用するとどうなるか見てみましょう それに対する方法。

    db.pets.replaceOne( 
        { type: "Dog" },
        { type: "Cow" }
        )

    結果:

    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

    1つのドキュメントが更新されました。

    見てみましょう。

    db.pets.find()

    結果:

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

    今回は、ドキュメント全体が新しいドキュメントに置き換えられました(_idを除く) 分野)。

    このメソッドは、ドキュメント全体を置き換えます(_idを除く) フィールド)。

    アップサート

    上記のすべてのメソッドは、upsertを受け入れます アップサート操作を実行できるようにする引数。

    upsert: trueの場合 、クエリ条件に一致する場合はドキュメントが更新されますが、一致しない場合は新しいドキュメントが挿入されます。

    例:

    db.pets.updateOne( 
        { name: "Wag" },
        { $set: { type: "Cow" } },
        { upsert: true }
        )

    結果:

    {
    	"acknowledged" : true,
    	"matchedCount" : 0,
    	"modifiedCount" : 0,
    	"upsertedId" : ObjectId("5fe1d5aad991410169410165")
    }

    この場合、一致するものがなかったため、ドキュメントがアップサートされました。

    コレクションを確認しましょう。

    db.pets.find()

    結果:

    { "_id" : 1, "type" : "Cow" }
    { "_id" : 2, "name" : "Bark", "type" : "Dog" }
    { "_id" : 3, "name" : "Meow", "type" : "Cat" }
    { "_id" : ObjectId("5fe1d5aad991410169410165"), "name" : "Wag", "type" : "Cow" }

    1. 以前のコマンドに依存する複数のコマンドをパイプラインに再インストールできますか?

    2. SQLで文字列内の文字列を検索する

    3. 変数KEYSを使用してLuaからRediszunionstoreを呼び出す

    4. Cloudera Data Science Workbenchと運用データベースを使用した機械学習アプリケーションの構築、パート1:セットアップと基本