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

MongoDBの配列に値を追加する2つの方法

    配列を含むドキュメントのコレクションがMongoDBにある場合は、必要に応じてそれらの配列に新しい値を追加できます。

    特定の要件に応じて、$pushを使用できます 演算子または$addToSet オペレーター。

    $push オペレーター

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

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

    そして、ドキュメント3の配列に値を追加したいとします。

    $pushを使用できます update()と組み合わせて 値を追加するには:

    db.products.update(
       { _id: 3 },
       { $push: { sizes: "XL" } }
    )

    コレクションをもう一度見て、変更を確認しましょう:

    db.products.find()

    結果:

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

    値がXLであることがわかります ドキュメント3のアレイに追加されました。

    $push 演算子は、$positionなどのさまざまな修飾子と一緒に使用することもできます 、$sort 、および$slice

    $eachを使用して、配列に複数の値を追加することもできます。 修飾子。

    MongoDB $pushを参照してください 例として。

    $addToSet オペレーター

    $addToSet 演算子は$pushと同じように機能します 、いくつかのことを除いて:

    • 追加しようとしている値がすでに配列に存在する場合、その値は追加されません。
    • $position$sort 、および$slice 修飾子は$addToSetでは使用できません 。

    コレクションが次のようになっているとします。

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

    ドキュメント2の配列に複数の値を挿入しましょう:

    db.products.update(
       { _id: 2 },
       { 
         $addToSet: { 
            sizes: {
               $each: [ "XXL", "XXXL" ]
            }
          } 
        }
    )

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

    db.products.find()

    結果:

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

    ドキュメント2の配列に2つの値が期待どおりに追加されていることがわかります。

    この例では、$eachを使用しています $pushでも使用できる修飾子 オペレーター。

    $eachのみを使用しました 複数の値を追加していたため、修飾子。値を1つだけ使用している場合は、$eachを省略できたはずです。 修飾子を指定すると、構文は上記の$pushのようになります。 例。

    前述のように、値がすでに存在する場合、その値は追加されません。また、両方の演算子を使用して配列を追加すると、配列全体が既存の配列内に個別の値として追加されます。

    MongoDB $addToSetを参照してください その他の例については。


    1. なぜこの非推奨の警告が表示されるのですか?! MongoDB

    2. MISCONF Redisは、RDBスナップショットを保存するように構成されています

    3. イベント統計ストアとしてRedisを使用したい

    4. ModulusとNode.jsを使用したリアルタイムチャット