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

MongoDB에서 검색 조건을 사용해 마지막 문서를 업데이트하는 방법

MongoDB에서 특정 검색 조건에 일치하는 문서 중 가장 마지막에 삽입된 문서만 업데이트하고 싶다면 findAndModify() 메서드를 활용하면 됩니다. 이 메서드는 정렬 옵션과 함께 사용해 조건에 맞는 여러 문서 중 하나만 선택적으로 수정할 수 있다는 장점이 있습니다.

1. 컬렉션 생성 및 문서 삽입

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

> db.demo516.insertOne({"Name":"John","Age":22,"Score":56});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e889fdb987b6e0e9d18f591")
}
> db.demo516.insertOne({"Name":"John","Age":23,"Score":67});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e889ff1987b6e0e9d18f592")
}
> db.demo516.insertOne({"Name":"John","Age":22,"Score":56});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e889ff3987b6e0e9d18f593")
}
> db.demo516.insertOne({"Name":"John","Age":22,"Score":66});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e889ffa987b6e0e9d18f594")
}

2. find()로 전체 문서 확인

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

> db.demo516.find();

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

{ "_id" : ObjectId("5e889fdb987b6e0e9d18f591"), "Name" : "John", "Age" : 22, "Score" : 56 }
{ "_id" : ObjectId("5e889ff1987b6e0e9d18f592"), "Name" : "John", "Age" : 23, "Score" : 67 }
{ "_id" : ObjectId("5e889ff3987b6e0e9d18f593"), "Name" : "John", "Age" : 22, "Score" : 56 }
{ "_id" : ObjectId("5e889ffa987b6e0e9d18f594"), "Name" : "John", "Age" : 22, "Score" : 66 }

3. findAndModify()로 마지막 문서 업데이트

이제 검색 조건(Name이 "John"이고 Age가 22)에 해당하는 문서 중 _id 기준 내림차순 정렬 시 첫 번째, 즉 가장 나중에 삽입된 문서의 Score 값을 98로 변경해 보겠습니다.

> db.demo516.findAndModify({
... query: {Name: "John", Age: 22},
... sort: {_id: -1},
... update: {$set: {Score: 98}},
... new: true
... })
{
   "_id" : ObjectId("5e889ffa987b6e0e9d18f594"),
   "Name" : "John",
   "Age" : 22,
   "Score" : 98
}

주요 옵션 설명

  • query: 업데이트 대상을 찾기 위한 검색 조건입니다.
  • sort: 조건에 일치하는 여러 문서 중 어떤 문서를 선택할지 결정합니다. {_id: -1}은 _id가 가장 큰, 즉 가장 최근에 삽입된 문서를 의미합니다.
  • update: 적용할 변경 내용입니다. 여기서는 $set 연산자로 Score 필드만 수정했습니다.
  • new: true로 설정하면 업데이트 의 문서가 반환되고, 생략하거나 false로 설정하면 업데이트 의 문서가 반환됩니다.

4. 업데이트 결과 확인

다시 find() 메서드로 컬렉션 전체를 조회해 변경 사항을 확인합니다.

> db.demo516.find();

출력 결과를 보면 조건에 일치했던 세 개의 문서 중 마지막 문서의 Score만 98로 변경된 것을 알 수 있습니다.

{ "_id" : ObjectId("5e889fdb987b6e0e9d18f591"), "Name" : "John", "Age" : 22, "Score" : 56 }
{ "_id" : ObjectId("5e889ff1987b6e0e9d18f592"), "Name" : "John", "Age" : 23, "Score" : 67 }
{ "_id" : ObjectId("5e889ff3987b6e0e9d18f593"), "Name" : "John", "Age" : 22, "Score" : 56 }
{ "_id" : ObjectId("5e889ffa987b6e0e9d18f594"), "Name" : "John", "Age" : 22, "Score" : 98 }

이처럼 findAndModify()sort 옵션을 조합하면 검색 조건에 맞는 여러 문서가 있더라도 원하는 하나의 문서(예: 마지막에 삽입된 문서)만 정확하게 업데이트할 수 있습니다.