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

MongoDB 컬렉션에서 서버 상태를 비활성(Inactive)으로 변경하는 방법

MongoDB에서 서버 정보가 배열 형태로 저장된 컬렉션이 있을 때, 특정 서버의 상태(Status)를 Active(활성)에서 Inactive(비활성)로 변경해야 하는 경우가 자주 발생합니다. 이 글에서는 배열 안의 원하는 IP에 해당하는 서버 상태만 정확히 업데이트하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 서버 정보를 담은 문서를 포함하는 컬렉션을 생성합니다.

> db.demo707.insertOne(
...    {
...       id:101,
...       "serverInformation":
...       [
...          {
...             "IP":"192.56.34.3",
...             "Status":"Active"
...          },
...          {
...             "IP":"192.56.36.4",
...             "Status":"Inactive"
...          }
...       ]
...    }
... );
{
   "acknowledged" : true,
      "insertedId" : ObjectId("5ea6f852551299a9f98c93c8")
}

위 문서에는 두 개의 서버 정보가 배열로 저장되어 있습니다. 하나는 192.56.34.3(Active)이고, 다른 하나는 192.56.36.4(Inactive)입니다.

2. 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

> db.demo707.find();

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

{ "_id" : ObjectId("5ea6f852551299a9f98c93c8"), "id" : 101, "serverInformation" : [ { "IP" : "192.56.34.3", "Status" : "Active" }, { "IP" : "192.56.36.4", "Status" : "Inactive" } ] }

3. 활성 서버를 비활성 상태로 변경

이제 활성(Active) 상태인 서버를 비활성(Inactive)으로 바꾸는 쿼리를 살펴보겠습니다. 핵심은 $set 연산자와 함께 위치 연산자($)를 사용하는 것입니다. 위치 연산자는 조건에 일치한 배열 요소를 가리키기 때문에, 해당 IP의 Status 값만 선택적으로 수정할 수 있습니다.

> db.demo707.update({"serverInformation.IP":"192.56.34.3"},{$set:{"serverInformation.$.Status":"Inactive"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

nMatched : 1, nModified : 1이 반환되었다면 하나의 문서가 성공적으로 수정된 것입니다.

4. 결과 확인

다시 find() 메서드로 전체 문서를 조회하여 변경 사항을 확인합니다.

> db.demo707.find();

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

{ "_id" : ObjectId("5ea6f852551299a9f98c93c8"), "id" : 101, "serverInformation" : [ { "IP" : "192.56.34.3", "Status" : "Inactive" }, { "IP" : "192.56.36.4", "Status" : "Inactive" } ] }

출력 결과를 보면 IP 192.56.34.3의 Status가 Inactive로 변경된 것을 확인할 수 있습니다. 이처럼 MongoDB에서는 update() 메서드에 $set과 위치 연산자($)를 조합하면 배열 내 특정 요소의 필드 값만 간단하고 안전하게 수정할 수 있습니다.