MongoDB에 존재하지 않는 경우 레코드 삽입

Tahseen Tauseef 2024년2월15일
  1. MongoDB의 ‘업서트’
  2. MongoDB에서 findAndModify() 메서드를 사용한 Upsert
  3. MongoDB에서 update() 메서드를 사용한 Upsert
  4. MongoDB에서 연산자 표현식을 사용한 Upsert
  5. MongoDB에서 대체 문서가 있는 Upsert
  6. MongoDB의 집계 파이프라인이 있는 Upsert
  7. MongoDB에서 점으로 구분된 _id 쿼리가 있는 Upsert
MongoDB에 존재하지 않는 경우 레코드 삽입

이 문서에서는 MongoDB 컬렉션에 레코드를 삽입하는 방법에 대해 간략하게 설명합니다. 이러한 레코드를 삽입하는 다양한 방법도 설명되어 있습니다.

또한 Upsert$setOninsert에 대해 간단히 설명합니다.

MongoDB의 ‘업서트’

Upsertupdate(), findAndModify() 등과 같은 업데이트 작업에 사용되는 MongoDB 옵션입니다. 다시 말해서 upsert는 업데이트와 삽입을 결합한 결과입니다(업데이트 + 삽입 = upsert).

옵션 값이 true이고 지정된 쿼리와 일치하는 문서가 식별되면 업데이트 작업이 일치하는 문서를 업데이트합니다. 또는 이 옵션의 값이 true이고 제공된 문서와 일치하는 문서가 없다고 가정합니다.

이 경우 이 옵션은 작업에 지정된 필드를 사용하여 컬렉션에 새 문서를 만듭니다. upsert 작업 옵션 값은 기본적으로 false입니다.

공유 컬렉션의 upsert 값이 true인 경우 필터에 전체 공유 키를 포함해야 합니다.

통사론:

upsert: <boolean>

upsert 옵션 값은 true 또는 false입니다.

이제 upsert 옵션의 사용법을 배웁니다.

MongoDB에서 findAndModify() 메서드를 사용한 Upsert

findAndModify() 기능으로 upsert 옵션을 활용할 수 있습니다. 이 메서드에서 이 옵션의 기본값은 false입니다.

이 옵션의 값을 true로 설정하면 절차는 다음 작업 중 하나를 수행합니다.

  1. 문서 또는 주어진 쿼리 기준과 일치하는 문서가 발견되면 findAndModify() 메소드가 문서를 업데이트합니다.
  2. 제공된 쿼리 기준과 일치하는 문서가 없으면 findAndModify() 메소드가 컬렉션에 새 문서를 삽입합니다.

통사론:

db.Collection_name.findAndModify(
{
selection_criteria:<document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>,
bypassDocumentValidation: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>,  ]
})

upsert 옵션의 값을 true로 조정하면 이제 employee 컬렉션에 새 문서를 삽입하게 됩니다.

db.employee.findAndModify({query:{name:"Ram"},
                            update:{$set:{department:"Development"}},
                            upsert:true})

여기서 upsert 옵션의 값은 true로 설정됩니다. findAndModify() 메서드는 Ram이라는 이름과 일치하는 문서가 없기 때문에 두 개의 필드(name: "Ram"department: "Development")가 있는 새 문서를 삽입합니다.

findandmodify 메서드

MongoDB에서 update() 메서드를 사용한 Upsert

update() 기능으로 upsert 옵션을 활용할 수 있습니다. 이 함수에서 이 매개변수의 기본값은 false입니다.

이 옵션의 값을 true로 설정하면 프로시저는 다음 중 하나를 수행합니다.

  1. 주어진 쿼리 기준과 일치하는 문서가 발견되면 update() 메소드가 문서를 업데이트합니다.
  2. 지정된 쿼리 기준을 충족하는 문서가 없으면 update() 함수가 컬렉션에 새 문서를 추가합니다.

MongoDB가 동일한 문서를 두 번 이상 추가하지 않도록 이름 필드에 고유한 인덱스를 만듭니다. 예를 들어, 많은 문서가 upsert: true를 사용하여 동일한 업데이트를 요구하는 경우 하나의 update 작업만 고유 인덱스가 있는 새 문서를 성공적으로 삽입합니다.

통사론:

db.Collection_name.update({Sele ction_ criteria}, {$set:{Update_data}}, {
upsert: <boo. lean >,
multi: <boo. lean>,
writeConcern: < document>,
collation: < document>,
arrayFilters: [ <filter document1>,  ],
hint:  <document|string>
})

upsert 옵션의 값을 true로 변경하면 employee 컬렉션에 새 문서를 삽입하게 됩니다.

db.employee.update({name:"Priya"}, {$set: {department: "HR"}},{upsert:true})

upsert 옵션의 값이 true로 설정되어 있기 때문에 update() 함수는 문서가 없기 때문에 두 개의 필드(name: "Priya"department: "HR")가 있는 새 문서를 삽입합니다. Priya라는 이름과 일치합니다.

업데이트 방법

MongoDB에서 연산자 표현식을 사용한 Upsert

지정된 컬렉션의 문서가 필터와 일치하지 않는다고 가정합니다. 이 경우 update 매개변수는 update 연산자가 있는 문서입니다.

upsert 옵션의 값은 true입니다. update 작업은 지정된 query 매개변수의 등호 절을 기반으로 새 문서를 생성하고 update 매개변수의 표현식을 적용합니다.

또는 다른 방식으로 설명하면 upsert 옵션이 true이고 제공된 필터에 맞는 문서가 없을 때 update 작업은 query에 지정된 필드를 사용하여 지정된 컬렉션에 새 문서를 생성하고 업데이트 문서.

예:

upsert 옵션의 값을 true로 변경하면 새 문서를 example 컬렉션에 넣게 됩니다.

db.example.update({Name: "Rekha"},   // Query parameter
                  {$set: {Phone: '7842235468 '}, // Update document
                   $setOnInsert: {Gender: 'Female'}},
                  {upsert: true})

update() 함수는 쿼리 조건 필드 "Name: Rekha"가 있는 새 문서를 생성하고 $set$setOnInsert 작업을 적용합니다.

연산자 표현식

MongoDB에서 대체 문서가 있는 Upsert

제공된 컬렉션의 문서가 필터를 충족하지 않고 update 매개변수에 대체 문서가 포함되어 있으며 upsert 문서의 값이 true로 설정되어 있다고 가정합니다. 업데이트 조치는 대체 문서에 지정된 필드와 함께 콜렉션에 새 문서를 삽입합니다.

대체 문서에 _id 필드가 포함된 경우 MongoDB는 새 문서에 대해 고유한 _id 필드를 생성하지 않습니다. 또는 대체 문서에 _id 필드가 없으면 MongoDB는 새 문서에 대해 새 _id 필드를 생성합니다.

쿼리 매개변수 및 대체 문서의 고유한 _id 필드 값은 허용되지 않습니다. 그렇게 하면 문제가 발생합니다.

예:

upsert 옵션의 값을 true로 조정하면 이제 example 컬렉션에 새 문서를 삽입하게 됩니다.

db.example.update({Name:"Hema"}, // Query parameter
                  {Name:"Hema", Phone:8332564578}, // Replacement document
                  {upsert:true})

교체 문서

MongoDB의 집계 파이프라인이 있는 Upsert

집계 파이프라인은 문서가 입력으로 승인되고 결과 문서 모음으로 생성되는 다단계 파이프라인입니다.

그런 다음 결과 문서는 입력으로 가져와 마지막 단계까지 다음 단계(사용 가능한 경우)에서 생성됩니다. 파이프라인의 단계 수는 1에서 n까지입니다.

지정된 필터에 맞는 문서가 없고 update 매개변수에 집계 파이프라인이 포함되어 있으며 upsert 옵션 값이 true로 설정되어 있다고 가정합니다. 이 경우 업데이트 작업은 컬렉션에 새 문서를 삽입합니다.

이 새 문서는 query 매개변수의 등호 절을 사용하여 구성되고 파이프라인이 적용되어 삽입할 문서를 생성합니다.

예:

upsert 옵션의 값을 true로 조정하면 이제 employee 컬렉션에 새 문서를 삽입하게 됩니다.

db.employee.update({name:"Ram"}, [{$set: {department: "HR", age:31}}],{upsert:true})

집계 파이프라인

MongoDB에서 점으로 구분된 _id 쿼리가 있는 Upsert

쿼리에 따라 update() 함수가 컬렉션의 데이터를 변경하는 방법과 upsert 옵션이 일치하는 문서가 없는 경우 새 필드를 추가하는 방법을 확인했습니다.

그러나 점으로 구분된 _id 쿼리가 있는 upsert는 예외이며 이러한 방식으로 문서를 삽입하려고 하면 MongoDB에서 오류가 발생합니다.

삽화:

다음 업데이트 작업을 살펴보십시오. update 작업이 upsert: true를 지정하고 쿼리가 점 표기법을 사용하여 _id 필드에 조건을 제공하기 때문에 삽입할 문서를 생성하는 동안 업데이트가 실패합니다.

db.employee.update({"_id.name":"Roma", "_id.uid":0},{age:21}, {upsert:true})

점선 쿼리

그래서 이 글에서는 MongoDB에서 빈 필드에 레코드를 삽입하는 문제에 대해 논의했습니다. Upsert는 다양한 시나리오로 간략하게 설명됩니다.