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

MongoDB $ pop

    MongoDBでは、$popを使用できます 配列から最初または最後の要素を削除する演算子。

    $popを使用する update()などのメソッドと組み合わせて 指定したドキュメントを変更で更新します。

    -1を使用する 最初の要素を削除し、1 最後を削除します。

    productsというコレクションがあるとします。 次のドキュメントを使用:

    { "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
    { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] }
    { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

    最初の要素を削除する

    次のように、ドキュメント1の配列の最初の要素を削除できます。

    db.products.update( 
      { _id: 1 }, 
      { $pop: { sizes: -1 } } 
    )

    出力:

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

    このメッセージは、1つのドキュメントが一致し、1つ(つまり同じドキュメント)が変更されたことを示しています。

    今すぐコレクションを見てみましょう:

    db.products.find()

    結果:

    { "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] }
    { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] }
    { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

    ドキュメント1の配列の最初の要素が削除されていることがわかります。

    最後の要素を削除

    次に、ドキュメント2の配列から最後の要素を削除しましょう。

    db.products.update( 
      { _id: 2 }, 
      { $pop: { sizes: 1 } } 
    )

    出力:

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

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

    db.products.find()

    結果:

    { "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] }
    { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L" ] }
    { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

    ドキュメント2の配列から最後の要素が削除されていることがわかります。

    すべてのドキュメントを更新

    updateMany()を使用する例を次に示します。 すべてのドキュメントを更新する方法:

    db.products.updateMany( 
      { }, 
      { $pop: { sizes: 1 } } 
    )

    出力:

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

    そして、コレクションを再確認します:

    db.products.find()

    結果:

    { "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L" ] }
    { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M" ] }
    { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M" ] }

    または、update()を使用することもできます multi: trueを指定して複数のドキュメントを更新する方法 。


    1. $matchが見つからない場合の$addFields

    2. spring-boot redis:ユーザーのすべてのセッションを無効にする方法は?

    3. mongoDB:配列フィールドに追加された新しい子ごとにObjectIdを作成する

    4. ssh経由でMongoDBを同期する