홈>
다음 질문을 고려하십시오
var collectionName = "test";
db.createCollection(collectionName);
db.getCollection(collectionName).insert({
"_id" : 1, "char" : "Gandalf", "class" : "barbarian", "lvl" : 20
});
db.getCollection(collectionName).bulkWrite([
{
insertOne: {
"document": {
"_id" : 2, "char" : "Dithras", "class" : "barbarian", "lvl" : 4
}
}
},
{
updateOne: {
filter: { "_id": 1},
update: { $set: {"class" : "mage"} },
upsert: true
}
}
])
결과 :
{
"acknowledged" : true,
"deletedCount" : 0.0,
"insertedCount" : 1.0,
"matchedCount" : 1.0,
"upsertedCount" : 0.0,
"insertedIds" : {
"0" : 2.0
},
"upsertedIds" : {}
}
내 질문은
id:1
로 문서를 업데이트하는 이유입니다.
upsertedIds
에 들어 가지 않습니다
? 이 문서가 upsert로 업데이트되지 않습니까? 아니면 아무것도 빠졌습니까?
문서에 따르면
upsert
에만 정보를 추가합니다
문서를 찾지 못하면 실제로
inserted
와 비슷합니다.
)이지만이 경우 어떤 항목이 업데이트되었는지 알 수 없습니다.
쿼리를 실행할 때 어떤 문서를 수정할 수 있습니까?
<시간>XY 문제를 피하려면 : 대량 작업 항목이 실패하고 싶습니다 (예 :
upsert:false
로 존재하지 않는 문서를 업데이트하려고 할 때)
) 및 오류를 발생시킨 ID를 기록합니다.
- 답변 # 1
- 답변 # 2
일괄 업데이트를 준비 할 때 문서 ID를 수집 한 다음 업데이트 후 존재하지 않는 문서 ID를 확인할 수 있습니다. 예 :
upsert:false
로 업데이트 한 문서 ID 1, 2 및 3의 경우db.test.aggregate([ { $group: { _id: null }}, { $project: { _id: [ 1, 2, 3 ] }}, { $unwind: "$_id" }, { $lookup: { from: "test", localField: "_id", foreignField: "_id", as: "exists" }}, { $match: { exists: { $size:0 }}}, { $project: { exists:0 }} ])
어떤 문서와도 일치하지 않는 필터 ID를 반환합니다 (예 : 용어에서 "실패").
관련 자료
- node.js - 프롤로그의 게시물이 mongodb 데이터베이스에 도달하지 않습니다
- angular - 선택기가 감속기의 상태를 반영하지 않습니다
- javascript - ReactuseState () 후크가 새 값을 반영하지 않습니다
- node.js - $text 인덱스로 MongoDB 찾기가 제대로 작동하지 않습니다
- MongoDB Atlas가 Azure Data Factory 2의 연결된 서비스 목록에 나타나지 않습니다
- javascript - 존재하지 않는 onject를 반환하는 MongoDB
- upsert 관련 MongoDb C # 동시성 문제
- node.js - MongoDB는 컬렉션을 참조했습니다 만들기가 적용되지 않습니다
- c# - 각도 클라이언트는 Azure Service Fabric에서 변경 사항을 반영하지 않습니다
- javascript - STUDIO 3T에서는 작동하지만 Expressjs에서는 작동하지 않는 MONGODB 쿼리
- java - 첫 번째 진드기 후에 스레드 카운터가 증가하지 않습니다
- vuejs2 - vuejs - 버튼을 클릭해도 카운터가 증가하지 않습니다
- node.js - 노드, mongodb 응용 프로그램의 데이터를 업데이트하기 위해 $inc 연산자를 추가해도 날짜가 업데이트되지 않습니다
- python - Heroku에서 MongoDB Atlas 연결이 작동하지 않습니다
- scheme - 카운터가 "alternate"기능으로 작동하지 않는 이유는 무엇입니까?
- node.js - 1M 레코드로 mongodb에서 upsert 배치 쿼리를 최적화하는 방법
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
아무것도 강요하지 않았기 때문입니다. 정기적 인 업데이트입니다.
문서가있는 경우 수정 문서에 수정 사항을 적용하십시오 (업데이트).
그렇지 않으면 문서를 만든 다음 수정 사항을 적용하십시오 (업 스테이트).
id = 1의 문서가 있으므로 업데이트입니다.
시도한 경우 :
존재하지 않은 문서의 경우 id = 3을 참고하십시오.
업 사트를 받았을 것입니다.