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

MongoDB에서 $push와 $slice를 함께 사용하는 방법

MongoDB에서 여러 번 푸시(Push) 및 슬라이스(Slice) 처리하기

MongoDB에서 배열에 요소를 추가하면서 배열 크기를 제한하고 싶다면 $push 연산자와 $slice 연산자를 함께 사용하면 됩니다. $push는 배열에 새로운 값을 추가하고, $slice는 지정한 개수만큼만 배열을 유지하여 오래된 요소를 자동으로 잘라냅니다.

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

> db.demo656.insertOne({Name:"John"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea060264deddd72997713cf")
}

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

> db.demo656.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5ea060264deddd72997713cf"), "Name" : "John" }

$push와 $slice를 함께 사용하기

이제 $push와 $slice를 조합한 업데이트 쿼리를 실행해 보겠습니다. $each는 여러 값을 한 번에 추가할 때 사용되며, $slice: -9는 배열의 마지막 9개 요소만 유지하겠다는 의미입니다.

> db.demo656.update({Name:"John"}, {"$push":{"ListOfName": {"$each": ["John"], "$slice": -9}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

변경된 문서를 다시 확인해 보면 ListOfName 필드가 생성된 것을 볼 수 있습니다.

> db.demo656.find();
{ "_id" : ObjectId("5ea060264deddd72997713cf"), "Name" : "John", "ListOfName" : [ "John" ] }

여러 번 반복해서 푸시하기

같은 방식으로 한 번 더 요소를 추가해 보겠습니다. 이번에는 "David"라는 값을 푸시합니다.

> db.demo656.update({Name:"John"}, {"$push":{"ListOfName": {"$each": ["David"], "$slice": -9}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

find() 메서드로 최종 결과를 확인합니다.

> db.demo656.find();
{ "_id" : ObjectId("5ea060264deddd72997713cf"), "Name" : "John", "ListOfName" : [ "John", "David" ] }

핵심 정리

  • $push: 배열 필드에 새로운 값을 추가합니다.
  • $each: 여러 개의 값을 한 번의 연산으로 추가할 수 있게 해줍니다.
  • $slice: 음수 값(예: -9)을 지정하면 배열의 마지막 N개 요소만 남기고 나머지는 제거합니다.

이처럼 $push와 $slice를 조합하면 배열이 무한정 늘어나는 것을 방지하고, 항상 최신 데이터만 일정 개수만큼 유지할 수 있습니다. 로그 저장이나 최근 활동 기록 관리 등에 매우 유용하게 활용됩니다.