mongodb php 라이브러리에서 insertMany를 사용할 때 중복된 문서를 무시하는 방법은 무엇입니까?
저는 mongo php 라이브러리를 사용하고 있으며, mongodb에 오래된 데이터를 삽입하려고 합니다.사용한insertMany()
고유 인덱스에 중복된 문서가 있을 수 있는 방대한 문서 배열을 메서드 및 전달합니다.
사용자 컬렉션이 있고 다음 인덱스가 있다고 가정합니다.
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.users"
},
{
"v" : 1,
"unique" : true,
"key" : {
"email" : 1
},
"name" : "shop_id_1_title_1",
"ns" : "test.users"
}
]
만약 중복된 서류가 있다면,MongoDB\Driver\Exception\BulkWriteException
프로세스를 올리고 중지할 수 있습니다.중복된 문서 삽입을 무시하고(또한 예외를 올리는 것을 방지) 다른 문서 삽입을 계속할 수 있는 방법을 찾고 싶습니다.
php.net 문서에서 다음과 같은 플래그를 찾았습니다.continueOnError
하지만 이 라이브러리에서는 작동하지 않는 것 같습니다.
php.net 의 예는 다음과 같습니다.
<?php
$con = new Mongo;
$db = $con->demo;
$doc1 = array(
'_id' => new MongoId('4cb4ab6d7addf98506010001'),
'id' => 1,
'desc' => "ONE",
);
$doc2 = array(
'_id' => new MongoId('4cb4ab6d7addf98506010002'),
'id' => 2,
'desc' => "TWO",
);
$doc3 = array(
'_id' => new MongoId('4cb4ab6d7addf98506010002'), // same _id as above
'id' => 3,
'desc' => "THREE",
);
$doc4 = array(
'_id' => new MongoId('4cb4ab6d7addf98506010004'),
'id' => 4,
'desc' => "FOUR",
);
$c = $db->selectCollection('c');
$c->batchInsert(
array($doc1, $doc2, $doc3, $doc4),
array('continueOnError' => true)
);
그리고 내가 mongo php 라이브러리와 함께 플래그를 사용하려고 했던 방법:
<?php
$users = (new MongoDB\Client)->test->users
$collection->insertMany([
[
'username' => 'admin',
'email' => 'admin@example.com',
'name' => 'Admin User',
],
[
'username' => 'test',
'email' => 'test@example.com',
'name' => 'Test User',
],
[
'username' => 'test 2',
'email' => 'test@example.com',
'name' => 'Test User 2',
],
],
[
'continueOnError' => true // This option is not working
]);
위의 코드는 여전히 예외를 발생시키며 작동하지 않는 것 같습니다.다른 옵션 플래그가 있나요, 아니면 이것을 할 수 있는 방법이 있습니까?
교체 시도continueOnError
에 대한 옵션.ordered
으로 설정합니다.false
문서에 따르면, 언제.ordered
옵션이 다음으로 설정됨false
insertMany는 단일 쓰기가 실패하더라도 쓰기를 계속합니다.
다음은 문서 링크입니다: 여러 개 삽입
언급URL : https://stackoverflow.com/questions/40811237/how-to-ignore-duplicate-documents-when-using-insertmany-in-mongodb-php-library
'programing' 카테고리의 다른 글
도커 컨테이너에서 UDP 브로드캐스트 전송 (0) | 2023.07.07 |
---|---|
just unit testing을 위해 Vuex 액션을 수정할 수 있습니까? (0) | 2023.07.07 |
리포지토리에서 단일 파일 검색 (0) | 2023.07.07 |
mongod를 사용하여 날짜를 utc에 저장할 때 시간대 문제를 어떻게 처리합니까? (0) | 2023.07.07 |
Document의 Mongoengine creation_time 특성 (0) | 2023.07.07 |