MongoDB에서 insertOne()은 컬렉션에 새로운 문서를 하나 삽입하는 메서드이고, updateOne()은 쿼리 필터(query filter)를 기준으로 조건에 일치하는 단일 문서만 수정하는 메서드입니다. 이 글에서는 두 메서드의 동작 방식을 실제 예제와 함께 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne()을 사용하여 demo735라는 컬렉션에 문서 4개를 순차적으로 삽입해 보겠습니다.
> db.demo735.insertOne({id:1,Name:"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead51b657bb72a10bcf0652")
}
> db.demo735.insertOne({id:1,Name:"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead51bb57bb72a10bcf0653")
}
> db.demo735.insertOne({id:1,Name:"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead51be57bb72a10bcf0654")
}
> db.demo735.insertOne({id:1,Name:"Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead51c757bb72a10bcf0655")
}2. find()로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo735.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5ead51b657bb72a10bcf0652"), "id" : 1, "Name" : "Chris" }
{ "_id" : ObjectId("5ead51bb57bb72a10bcf0653"), "id" : 1, "Name" : "David" }
{ "_id" : ObjectId("5ead51be57bb72a10bcf0654"), "id" : 1, "Name" : "Bob" }
{ "_id" : ObjectId("5ead51c757bb72a10bcf0655"), "id" : 1, "Name" : "Carol" }3. updateOne()으로 문서 수정하기
이제 updateOne()을 사용하여 id가 1인 첫 번째 문서의 Name 필드를 "Robert"로 변경해 보겠습니다.
db.demo735.updateOne({id:1},{$set:{Name:"Robert"}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }실행 결과에 포함된 각 필드의 의미는 다음과 같습니다.
- matchedCount: 쿼리 필터와 일치한 문서의 개수
- modifiedCount: 실제로 값이 변경된 문서의 개수
여기서 주의할 점은, id:1 조건에 해당하는 문서가 여러 개 있더라도 updateOne()은 가장 먼저 발견된 한 건만 수정한다는 것입니다. 조건에 맞는 모든 문서를 변경하려면 updateMany()를 사용해야 합니다.
4. 업데이트 결과 확인하기
수정이 완료되었으므로 find() 메서드로 다시 전체 문서를 조회해 보겠습니다.
> db.demo735.find();
출력 결과를 보면 첫 번째 문서의 Name 값만 "Chris"에서 "Robert"로 변경된 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5ead51b657bb72a10bcf0652"), "id" : 1, "Name" : "Robert" }
{ "_id" : ObjectId("5ead51bb57bb72a10bcf0653"), "id" : 1, "Name" : "David" }
{ "_id" : ObjectId("5ead51be57bb72a10bcf0654"), "id" : 1, "Name" : "Bob" }
{ "_id" : ObjectId("5ead51c757bb72a10bcf0655"), "id" : 1, "Name" : "Carol" }정리
insertOne()은 컬렉션에 문서를 추가할 때, updateOne()은 특정 조건에 맞는 단일 문서를 수정할 때 사용합니다. 두 메서드 모두 acknowledged(처리 성공 여부)와 함께 insertedId 또는 matchedCount/modifiedCount 같은 상태 정보를 반환하므로, 이 값을 활용하면 작업 결과를 손쉽게 검증할 수 있습니다.