MongoDB에 존재하지 않는 경우 레코드 삽입
- MongoDB의 ‘업서트’
-
MongoDB에서
findAndModify()
메서드를 사용한Upsert
-
MongoDB에서
update()
메서드를 사용한Upsert
-
MongoDB에서 연산자 표현식을 사용한
Upsert
-
MongoDB에서 대체 문서가 있는
Upsert
-
MongoDB의 집계 파이프라인이 있는
Upsert
-
MongoDB에서 점으로 구분된
_id
쿼리가 있는Upsert
이 문서에서는 MongoDB 컬렉션에 레코드를 삽입하는 방법에 대해 간략하게 설명합니다. 이러한 레코드를 삽입하는 다양한 방법도 설명되어 있습니다.
또한 Upsert
및 $setOninsert
에 대해 간단히 설명합니다.
MongoDB의 ‘업서트’
Upsert
는 update()
, findAndModify()
등과 같은 업데이트 작업에 사용되는 MongoDB 옵션입니다. 다시 말해서 upsert
는 업데이트와 삽입을 결합한 결과입니다(업데이트 + 삽입 = upsert
).
옵션 값이 true
이고 지정된 쿼리와 일치하는 문서가 식별되면 업데이트 작업이 일치하는 문서를 업데이트합니다. 또는 이 옵션의 값이 true
이고 제공된 문서와 일치하는 문서가 없다고 가정합니다.
이 경우 이 옵션은 작업에 지정된 필드를 사용하여 컬렉션에 새 문서를 만듭니다. upsert
작업 옵션 값은 기본적으로 false
입니다.
공유 컬렉션의 upsert
값이 true
인 경우 필터에 전체 공유 키를 포함해야 합니다.
통사론:
upsert: <boolean>
upsert
옵션 값은 true
또는 false
입니다.
이제 upsert
옵션의 사용법을 배웁니다.
MongoDB에서 findAndModify()
메서드를 사용한 Upsert
findAndModify()
기능으로 upsert
옵션을 활용할 수 있습니다. 이 메서드에서 이 옵션의 기본값은 false
입니다.
이 옵션의 값을 true
로 설정하면 절차는 다음 작업 중 하나를 수행합니다.
- 문서 또는 주어진 쿼리 기준과 일치하는 문서가 발견되면
findAndModify()
메소드가 문서를 업데이트합니다. - 제공된 쿼리 기준과 일치하는 문서가 없으면
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"
)가 있는 새 문서를 삽입합니다.
MongoDB에서 update()
메서드를 사용한 Upsert
update()
기능으로 upsert
옵션을 활용할 수 있습니다. 이 함수에서 이 매개변수의 기본값은 false
입니다.
이 옵션의 값을 true
로 설정하면 프로시저는 다음 중 하나를 수행합니다.
- 주어진 쿼리 기준과 일치하는 문서가 발견되면
update()
메소드가 문서를 업데이트합니다. - 지정된 쿼리 기준을 충족하는 문서가 없으면
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
는 다양한 시나리오로 간략하게 설명됩니다.