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

MongoDB-ドキュメントを削除する

    MongoDBでは、3つの方法のいずれかを使用してドキュメントを削除できます。

    MongoDBには、ドキュメントを削除するための3つの方法があります。

    • db.collection.deleteOne()
    • db.collection.deleteMany()
    • db.collection.remove()

    db.collection.deleteOne() 方法

    db.collection.deleteOne() 複数のドキュメントが条件に一致する場合でも、1つのドキュメントのみを削除します。

    db.collection.deleteOne()の例を次に示します。 単一のドキュメントを削除する方法。

    まず、複数の結果を返すクエリを実行してみましょう:

    db.artists.find( { artistname: { $in: [ "The Kooks", "Gang of Four", "Bastille" ] } } )

    結果:

    { "_id" : ObjectId("5781d7f248ef8c6b3ffb014d"), "artistname" : "The Kooks" }
    { "_id" : ObjectId("5781d7f248ef8c6b3ffb014e"), "artistname" : "Bastille" }
    { "_id" : ObjectId("5781d7f248ef8c6b3ffb014f"), "artistname" : "Gang of Four" }
    

    わかりました。その基準に一致するドキュメントが3つあることがわかりました。

    次に、db.collection.deleteOne()にまったく同じフィルタリング基準を使用しましょう。 方法:

    db.artists.deleteOne( { artistname: { $in: [ "The Kooks", "Gang of Four", "Bastille" ] } } )

    結果のメッセージ:

    { "acknowledged" : true, "deletedCount" : 1 }
    

    そのため、3つのドキュメントが基準に一致したにもかかわらず、1つのドキュメントのみが削除されました。

    find()を実行してみましょう もう一度クエリを実行して、残っているドキュメントを確認します:

    db.artists.find( { artistname: { $in: [ "The Kooks", "Gang of Four", "Bastille" ] } } )

    結果:

    { "_id" : ObjectId("5781d7f248ef8c6b3ffb014e"), "artistname" : "Bastille" }
    { "_id" : ObjectId("5781d7f248ef8c6b3ffb014f"), "artistname" : "Gang of Four" }
    

    db.collection.deleteMany() 方法

    db.collection.deleteMany() メソッドは、条件に一致するすべてのドキュメントを削除します。

    それでは、db.collection.deleteMany()を実行してみましょう。 前の例とまったく同じ基準を持つメソッド。 2つのレコードが残っていることを忘れないでください。 db.collection.deleteMany()かどうかを見てみましょう 両方を削除します:

    db.artists.deleteMany( { artistname: { $in: [ "The Kooks", "Gang of Four", "Bastille" ] } } )

    結果のメッセージ:

    { "acknowledged" : true, "deletedCount" : 2 }
    

    そのため、残りの2つのレコードは削除されました。

    db.collection.remove() 方法

    db.collection.remove() メソッドは、指定された基準に一致する単一のドキュメントまたはすべてのドキュメントを削除します。

    ここでは、アーティスト名が「AC/DC」であるすべてのドキュメントを削除します。

    db.artists.remove( { artistname: "AC/DC" } )

    結果:

    WriteResult({ "nRemoved" : 1 })
    

    この場合、AC/DCは1つだけです:)

    justOne オプション

    justOneを使用できます 削除操作を1つのドキュメントのみに制限するパラメーター(db.collection.deleteOne()を使用する場合と同様) 。

    これが例です。

    まず、複数のドキュメントを返すクエリを実行しましょう:

    db.musicians.find( { born: { $lt: 1950 } } )

    結果:

    { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
    { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
    { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
    

    次に、justOneを使用してこれらのレコードの1つを削除します オプション。ここでも、まったく同じフィルタリング基準を使用します:

    db.musicians.remove( { born: { $lt: 1950 } }, { justOne: 1 } )

    結果のメッセージ:

    WriteResult({ "nRemoved" : 1 })
    

    次に、同じクエリを実行して、残っているドキュメントを確認します。

    db.musicians.find( { born: { $lt: 1950 } } )

    結果:

    { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
    { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
    

    コレクション内のすべてのドキュメントを削除する

    フィルタリング基準を省略するだけで、コレクション内のすべてのドキュメントを削除できます。

    Artists 内のすべてのドキュメントを削除しましょう コレクション:

    db.artists.remove( {} )

    結果のメッセージ:

    WriteResult({ "nRemoved" : 8 })
    

    エラー:削除にはクエリが必要です を受け取った場合 エラー、中括弧を含めるのを忘れていないことを確認してください。これらを含める必要があります。


    1. Redis AOF fsync(ALWAYS)とLSMツリー

    2. MongoDBセキュリティのベストプラクティス

    3. MongoDBでユーザーと認証を管理する方法

    4. summongodbでグループ化