안녕하세요 새로운 mongodb 문서가 없으면 Upsert = true로 findOneAndUpdate를 사용하는 노드 js 코드가 있습니다.findOneAndUpdate upsert duplicate prevention 테스트
두 개의 비동기 스레드가 동시에 내 코드를 호출하는지 테스트하고 싶습니다. 그런 다음 중복을 생성합니다.
테스트 할 수 있습니까? 어떻게해야합니까? 나는 테스트의 초보자이다.
안녕하세요 새로운 mongodb 문서가 없으면 Upsert = true로 findOneAndUpdate를 사용하는 노드 js 코드가 있습니다.findOneAndUpdate upsert duplicate prevention 테스트
두 개의 비동기 스레드가 동시에 내 코드를 호출하는지 테스트하고 싶습니다. 그런 다음 중복을 생성합니다.
테스트 할 수 있습니까? 어떻게해야합니까? 나는 테스트의 초보자이다.
문서 수준 동시성
WiredTiger 쓰기 작업을위한 문서 수준의 동시성 제어를 사용합니다. 따라서 여러 클라이언트가 동시에 컬렉션의 다른 문서를 수정할 수 있습니다.
대부분의 읽기 및 쓰기 작업에서 WiredTiger는 낙관적 인 동시성 제어를 사용합니다. WiredTiger는 글로벌 데이터베이스 및 수집 수준에서만 의도 잠금을 사용합니다. 저장소 엔진이 두 작업 간의 충돌을 감지하면 쓰기 충돌이 발생하여 이 발생하여 MongoDB가 해당 작업을 투명하게 다시 시도합니다.
많은 글로벌 작업, 일반적으로 여러 데이터베이스와 관련된 수명이 짧은 작업에는 여전히 글로벌 "인스턴스 전체"잠금이 필요합니다. 컬렉션을 삭제하는 등의 일부 작업은 여전히 전용 데이터베이스 잠금을 필요로합니다. Document Level Concurrency
그리고 하나의 모음 같은 _id에서
당신이 설명하는 상황이, 새로운 생성됩니다 실행 얻을 것이다 첫 번째 쿼리를 발생하므로 경우에도 _id 그것에 고유 인덱스가 존재하지 않습니다 문서 및 나중에 쿼리를 업데이트합니다.
중복을 사용하면 두 개의 문서가 별도의 ID와 동일한 데이터 값으로 작성된다는 의미입니다. https://docs.mongodb.com/manual/reference/method/db.collection.findAndModify/ Upsert 및 고유 색인에 대한 링크 단락을 확인하십시오. –
좋아요, 나는 당신이 _id와 만 일치하여 업데이 트하는 줄 알았는데. 귀하의 경우 업데이트하기 위해 일치하려는 필드가 고유 색인이되지 않으면 중복 문서로 끝날 수 있습니다. – daemon24
예 사실 내가 테스트 해 볼 수 있는지 알고 싶어하는 사람들을 독특하게 만들었습니다. –