programing

mongodb php 라이브러리에서 insertMany를 사용할 때 중복된 문서를 무시하는 방법은 무엇입니까?

powerit 2023. 7. 7. 21:11
반응형

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옵션이 다음으로 설정됨falseinsertMany는 단일 쓰기가 실패하더라도 쓰기를 계속합니다.

다음은 문서 링크입니다: 여러 개 삽입

언급URL : https://stackoverflow.com/questions/40811237/how-to-ignore-duplicate-documents-when-using-insertmany-in-mongodb-php-library

반응형