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

MongoDB에서 $push 연산자로 다른 필드 값으로 배열 업데이트하기

MongoDB에서 다른 필드의 값을 활용해 배열을 업데이트하려면 $push 연산자를 사용합니다. 특히 $each와 함께 사용하면 여러 값을 한 번에 추가할 수 있고, $slice를 조합하면 배열의 크기까지 제어할 수 있습니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 문서가 포함된 컬렉션을 생성합니다.

> db.demo283.insertOne({"Name":"Chris","Status":["Active","Inactive"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e4ab97ddd099650a5401a75")
}

2. 문서 조회하기

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

> db.demo283.find();

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

{ "_id" : ObjectId("5e4ab97ddd099650a5401a75"), "Name" : "Chris", "Status" : [ "Active", "Inactive" ] }

3. $push로 배열 업데이트하기

다음은 $push 연산자에 $each와 $slice 옵션을 조합하여 배열에 새로운 값을 추가하는 쿼리입니다.

> db.demo283.update({}, {$push: {Status:{$each:['Regular', 'NotRegular'], '$slice': -4}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4. 업데이트 결과 확인

업데이트가 완료되면 find() 메서드로 문서를 다시 조회하여 변경 사항을 확인합니다.

> db.demo283.find();

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

{ "_id" : ObjectId("5e4ab97ddd099650a5401a75"), "Name" : "Chris", "Status" : [ "Active", "Inactive", "Regular", "NotRegular" ] }

쿼리 동작 방식 정리

$each: 'Regular'와 'NotRegular' 두 값을 한 번의 연산으로 Status 배열에 순차적으로 추가합니다.

$slice: -4: 배열의 마지막 4개 요소만 유지하도록 크기를 제한합니다. 음수 값을 지정하면 배열 끝에서부터 해당 개수만큼 남기고 앞부분은 잘려나갑니다. 만약 배열이 4개보다 작으면 전체가 그대로 유지됩니다.

이처럼 $push, $each, $slice를 조합하면 배열에 새 값을 추가하면서 동시에 최대 크기를 관리할 수 있어, 최근 상태 목록이나 로그성 데이터를 저장할 때 매우 유용합니다.