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

MongoDB에서 전체 문서(모든 필드)를 업데이트하는 가장 빠른 방법

replaceOne()으로 문서 전체 교체하기

MongoDB에서 문서의 모든 필드를 한 번에 업데이트하려면 replaceOne() 메서드를 사용하는 것이 가장 빠르고 간단한 방법입니다. 이 메서드는 지정한 조건과 일치하는 첫 번째 문서를 찾아 새로운 문서로 완전히 대체합니다.

1. 샘플 컬렉션 생성

먼저 데모용 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo431.insertOne({"Name":"Chris","Age":32});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e770ba6bbc41e36cc3cae89")
}
> db.demo431.insertOne({"Name":"David","Age":31});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e770bacbbc41e36cc3cae8a")
}
> db.demo431.insertOne({"Name":"John","Age":24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e770bb3bbc41e36cc3cae8b")
}
> db.demo431.insertOne({"Name":"Bob","Age":22});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e770bb8bbc41e36cc3cae8c")
}

2. 현재 문서 확인

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

> db.demo431.find();

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

{ "_id" : ObjectId("5e770ba6bbc41e36cc3cae89"), "Name" : "Chris", "Age" : 32 }
{ "_id" : ObjectId("5e770bacbbc41e36cc3cae8a"), "Name" : "David", "Age" : 31 }
{ "_id" : ObjectId("5e770bb3bbc41e36cc3cae8b"), "Name" : "John", "Age" : 24 }
{ "_id" : ObjectId("5e770bb8bbc41e36cc3cae8c"), "Name" : "Bob", "Age" : 22 }

3. replaceOne()으로 전체 문서 업데이트

다음은 MongoDB에서 문서 전체(모든 필드)를 교체하는 쿼리입니다. Name이 "John"인 문서를 Name이 "Robert", Age가 45인 새로운 내용으로 통째로 바꿉니다.

> db.demo431.replaceOne(
...    { "Name" : "John" },
...    { "Name" : "Robert", "Age" :45 }
... );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

실행 결과에서 matchedCountmodifiedCount가 각각 1로 반환되었으므로, 조건에 일치하는 한 개의 문서가 성공적으로 교체된 것을 확인할 수 있습니다.

4. 업데이트 결과 확인

다시 find() 메서드로 변경된 데이터를 조회해 보겠습니다.

> db.demo431.find();

출력 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e770ba6bbc41e36cc3cae89"), "Name" : "Chris", "Age" : 32 }
{ "_id" : ObjectId("5e770bacbbc41e36cc3cae8a"), "Name" : "David", "Age" : 31 }
{ "_id" : ObjectId("5e770bb3bbc41e36cc3cae8b"), "Name" : "Robert", "Age" : 45 }
{ "_id" : ObjectId("5e770bb8bbc41e36cc3cae8c"), "Name" : "Bob", "Age" : 22 }

"John"(24세) 문서가 "Robert"(45세)로 완전히 교체된 것을 볼 수 있습니다.

replaceOne() 사용 시 주요 특징

  • 필터 조건과 일치하는 첫 번째 문서만 교체됩니다.
  • _id 값은 자동으로 유지되며, 교체 문서에 다른 _id를 지정하면 오류가 발생합니다.
  • $set 같은 업데이트 연산자 없이 새 문서 전체를 인수로 전달하므로, 기존 문서의 나머지 필드는 모두 사라집니다.
  • 일부 필드만 수정하고 싶다면 replaceOne() 대신 updateOne()과 $set 연산자를 사용하는 것이 적합합니다.