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

MongoDB에서 기존 필드를 유지한 채 레코드를 업데이트하는 방법

MongoDB에서 $set 연산자로 레코드 업데이트하기

MongoDB에서 문서를 업데이트할 때 $set 연산자를 사용하면 기존 필드를 그대로 유지하면서 새로운 필드만 추가하거나 특정 필드의 값만 변경할 수 있습니다. 만약 $set 없이 update() 메서드를 사용하면 지정하지 않은 기존 필드가 모두 삭제되므로 주의해야 합니다.

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

> db.updateRecordDemo.insertOne({"StudentName":"Larry"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cbd6f95de8cc557214c0e0a")
}
> db.updateRecordDemo.insertOne({"StudentName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cbd6f9cde8cc557214c0e0b")
}
> db.updateRecordDemo.insertOne({"StudentName":"Mike"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cbd6f9dde8cc557214c0e0c")
}

find() 메서드로 전체 문서 조회하기

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

> db.updateRecordDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5cbd6f95de8cc557214c0e0a"), "StudentName" : "Larry" }
{ "_id" : ObjectId("5cbd6f9cde8cc557214c0e0b"), "StudentName" : "David" }
{ "_id" : ObjectId("5cbd6f9dde8cc557214c0e0c"), "StudentName" : "Mike" }

$set을 사용한 업데이트 쿼리 실행

이제 기존 필드(StudentName)를 대체하지 않고 새로운 필드(StudentAge)를 추가하는 업데이트 쿼리를 실행해 보겠습니다.

> db.updateRecordDemo.update({"_id" :ObjectId("5cbd6f9cde8cc557214c0e0b") },{$set : {"StudentAge":24}});
   WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

WriteResult 결과를 보면 nMatched가 1(조건에 일치하는 문서 1개), nModified가 1(실제 수정된 문서 1개)로 정상적으로 업데이트가 완료된 것을 확인할 수 있습니다.

업데이트 후 결과 확인

다시 한번 전체 문서를 조회하여 변경 사항을 확인해 보겠습니다.

> db.updateRecordDemo.find().pretty();

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

{ "_id" : ObjectId("5cbd6f95de8cc557214c0e0a"), "StudentName" : "Larry" }
{
   "_id" : ObjectId("5cbd6f9cde8cc557214c0e0b"),
   "StudentName" : "David",
   "StudentAge" : 24
}
{ "_id" : ObjectId("5cbd6f9dde8cc557214c0e0c"), "StudentName" : "Mike" }

결과를 보면 David 문서에 기존의 StudentName 필드는 그대로 유지된 상태에서 새로운 StudentAge 필드가 추가된 것을 확인할 수 있습니다. 이처럼 MongoDB에서 부분 업데이트를 수행하려면 반드시 $set 연산자를 함께 사용하는 것이 핵심입니다.