Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 두 가지 조건에 따라 수량을 업데이트하는 방법

MongoDB에서 두 가지 조건에 따라 수량 업데이트하기

배열 안에 있는 특정 요소의 수량(Quantity) 값을 두 가지 조건을 기반으로 수정하려면 update() 메서드를 사용하고, 쿼리 조건 부분에 두 개의 조건을 함께 지정하면 됩니다.

먼저 예제로 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

> db.demo605.insertOne(
...    {
...       _id:1,
...       "Information" : [
...          {
...             "id" : "Product-1",
...             "Quantity" : 50,
...          },
...          {
...             "id" : "Product-2",
...             "Quantity" : 100,
...          },
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 1 }
>
>
> db.demo605.insertOne(
...    {
...       _id:2,
...       "Information" : [
...          {
...             "id" : "Product-1",
...             "Quantity" : 30,
...          },
...          {
...             "id" : "Product-2",
...             "Quantity" : 40,
...          },
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 2 }

find() 메서드를 사용하여 컬렉션의 모든 문서를 확인합니다.

> db.demo605.find();

위 명령은 다음과 같은 결과를 출력합니다.

{ "_id" : 1, "Information" : [
   { "id" : "Product-1", "Quantity" : 50 },
   { "id" : "Product-2", "Quantity" : 100 }
] }
{ "_id" : 2, "Information" : [
   { "id" : "Product-1", "Quantity" : 30 },
   { "id" : "Product-2", "Quantity" : 40 }
] }

두 가지 조건으로 수량을 업데이트하는 쿼리

다음은 _id와 배열 요소의 id, 이 두 가지 조건을 동시에 만족하는 항목의 수량을 업데이트하는 쿼리입니다. 위치 연산자($)를 사용하면 조건에 일치하는 배열 요소만 정확하게 수정할 수 있습니다.

> db.demo605.update({_id:1,"Information.id":"Product-1"},
   {$set:{"Information.$.Quantity":1000}}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

업데이트 후 다시 find().pretty() 메서드로 전체 문서를 확인해 보겠습니다.

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

실행 결과는 다음과 같습니다.

{
   "_id" : 1,
   "Information" : [
      {
         "id" : "Product-1",
         "Quantity" : 1000
      },
      {
         "id" : "Product-2",
         "Quantity" : 100
      }
   ]
}
{
   "_id" : 2,
   "Information" : [
      {
         "id" : "Product-1",
         "Quantity" : 30
      },
      {
         "id" : "Product-2",
         "Quantity" : 40
      }
   ]
}

결과 분석

출력 결과를 살펴보면 _id가 1인 문서 중에서 배열 요소의 id가 "Product-1"인 항목의 Quantity 값만 50에서 1000으로 변경된 것을 확인할 수 있습니다. 같은 문서 안의 "Product-2"나 _id가 2인 문서의 데이터는 그대로 유지됩니다.

이처럼 update() 메서드의 첫 번째 인수(쿼리 조건)에 여러 조건을 나열하면, 해당 조건을 모두 충족하는 문서와 배열 요소만 선택적으로 업데이트할 수 있습니다. 위치 연산자($)는 쿼리 조건과 일치한 첫 번째 배열 요소를 가리키며, $set 연산자와 함께 사용하면 해당 요소의 필드만 정확히 변경할 수 있습니다.