MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBドキュメント配列のオブジェクトを更新しますか(ネストされた更新)?


ドキュメントの配列内のオブジェクトを更新するには、update()メソッドを使用する必要があります。 update()メソッドを理解するために、documentを使用してコレクションを作成しましょう。ドキュメントを使用してコレクションを作成するためのクエリは次のとおりです。

> db.updateObjects.insertOne({"CustomerId":1,"CustomerName":"Larry","TotalItems":100,
... "ItemDetails":[
... {
... "NameOfItem":"Item_1",
... "Amount":450
... },
... {
... "NameOfItem":"Item_2",
... "Amount":500
... },
... {
... "NameOfItem":"Item_3",
... "Amount":200
... }
... ]
... }
... );

出力は次のとおりです。

{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6d688b0c3d5054b766a769")
}

これで、find()メソッドを使用してコレクションのドキュメントを表示できます。クエリは次のとおりです。

> db.updateObjects.find().pretty();

以下は、上記で作成したコレクションのドキュメントを表示する出力です。

{
   "_id" : ObjectId("5c6d688b0c3d5054b766a769"),
   "CustomerId" : 1,
   "CustomerName" : "Larry",
   "TotalItems" : 100,
   "ItemDetails" : [
      {
         "NameOfItem" : "Item_1",
         "Amount" : 450
      },
      {
         "NameOfItem" : "Item_2",
         "Amount" : 500
      },
      {
         "NameOfItem" : "Item_3",
         "Amount" : 200
      }
   ]
}

「Amount」:200を値130でインクリメントします。クエリは次のとおりです。ここでは、$inc演算子を使用してフィールドの値をインクリメントしました。

> db.updateObjects.update({"CustomerId":1,"ItemDetails.NameOfItem":"Item_3"},
{$inc:{"ItemDetails.$.Amount":130}},
... false,true);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

増分値を正常に更新しました。コレクションのドキュメントを表示してみましょう。クエリは次のとおりです。

> db.updateObjects.find().pretty();

出力は次のとおりです。

{
   "_id" : ObjectId("5c6d688b0c3d5054b766a769"),
   "CustomerId" : 1,
   "CustomerName" : "Larry",
   "TotalItems" : 100,
   "ItemDetails" : [
      {
         "NameOfItem" : "Item_1",
         "Amount" : 450
      },
      {
         "NameOfItem" : "Item_2",
         "Amount" : 500
      },
      {
         "NameOfItem" : "Item_3",
         "Amount" : 330
      }
   ]
}

サンプル出力を見てください。金額200は130ずつ増加し、現在は330になっています。


  1. MongoDB-ドキュメントの一部を更新しますか?

    ドキュメントの一部を更新するには、multiをtrueに設定します。ドキュメントを使用してコレクションを作成しましょう- > db.demo312.insertOne({"FirstName":"Robert"}); {    "acknowledged" : true,    "insertedId" : ObjectId("5e50ce16f8647eb59e56204a") } > db.demo312.insertOne({"

  2. MongoDBを使用して、特定のネストされたドキュメントのオブジェクトの配列をクエリしますか?

    ネストされたドキュメントのオブジェクトの配列をクエリするには、find()を使用します。ドキュメントを使用してコレクションを作成しましょう- > db.demo763.insertOne( ...    { ...       _id:1, ...       CountryName:"US", ...       "studentInformation": [ ...          {