데이터베이스 명령 실행
개요
MongoDB PHP 라이브러리는 Client
, Database
및 Collection
클래스 전반에 걸쳐 일반적인 데이터베이스 명령 에 대한 헬퍼 메서드를 제공합니다. 또한 MongoDB\Database::command()
메서드를 사용하여 헬퍼 메서드가 없는 데이터베이스 명령을 실행 수 있습니다.
메서드는 MongoDB\Database::command()
항상 MongoDB\ 드라이버\Cursor 를 반환합니다. 객체 , 명령 커서 를 통해 단일 결과 문서 와 여러 결과 를 반환 하는 명령 실행 을 지원 해야 하기 때문입니다 .
단일 결과 문서를 반환하는 명령
대부분의 데이터베이스 명령은 단일 결과 문서 를 반환하며, 이는 반환된 커서 를 배열 로 변환하고 첫 번째 요소에 액세스하여 얻을 수 있습니다. 다음 예시 에서는 핑 명령을 실행하고 결과 문서 를 출력합니다.
$database = (new MongoDB\Client)->test; $cursor = $database->command(['ping' => 1]); var_dump($cursor->toArray()[0]);
출력은 다음과 유사합니다:
object(MongoDB\Model\BSONDocument)#11 (1) { ["storage":"ArrayObject":private]=> array(1) { ["ok"]=> float(1) } }
여러 결과를 생성하는 명령
일부 데이터베이스 명령은 여러 결과가 포함된 커서를 반환합니다. 다음 예제에서는 listCollections 를 실행하여 test
데이터베이스의 각 컬렉션에 대한 결과 문서가 포함된 커서를 반환하고 foreach
루프를 사용하여 결과를 반복합니다. 이 예제는 예시입니다. 애플리케이션은 일반적으로 실제로 MongoDB\Database::listCollections()
를 사용합니다.
$database = (new MongoDB\Client)->test; $cursor = $database->command(['listCollections' => 1]); foreach ($cursor as $collection) { echo $collection['name'], "\n"; }
출력은 다음과 비슷할 수 있습니다.
persons posts zips
참고
프로토콜 수준에서 커서 커서 에 필요한 필수 요소(예: 커서의 ID, 네임스페이스 및 첫 번째 결과 배치 (선택 사항))가 포함된 단일 결과 문서 를 반환합니다. 확장의 MongoDB\ 드라이버\ 관리자::executeCommand() 메서드가 이러한 응답을 감지하면 반복 가능한 명령 커서 를 생성하고 원시 결과 문서 대신 반환합니다. 필요한 경우 명령 모니터링 을 사용하여 원시 결과 문서를 계속 관찰할 수 있습니다.
사용자 지정 읽기 설정 (read preference) 지정
createUser 와 같은 쓰기 명령은 쓰기 가능한 서버 에서만 실행할 수 있습니다(예: 프라이머리 복제본 세트 멤버). 와 같은 MongoDB PHP 라이브러리의 명령 헬퍼 메서드는 필요한 MongoDB\Database::drop()
경우 자체 읽기 설정 (read preference) 을 적용 할 수 있습니다. 그러나 MongoDB\Database::command()
메서드는 일반적인 메서드이며 기본적으로 해당 메서드가 호출된 데이터베이스 객체 의 읽기 설정 (read preference) 을 사용합니다. 필요한 경우 readPreference
옵션을 사용하여 기본값 읽기 설정 (read preference) 을 재정의할 수 있습니다.
다음 예시에서는 cluster에 연결하고 secondaryPreferred
을 클라이언트의 기본 읽기 설정 (read preference)으로 지정합니다. 그런 다음 test
데이터베이스에서 createUser
명령을 실행할 때 primary
읽기 설정 (read preference)을 지정합니다.
$client = new MongoDB\Client( 'mongodb+srv://cluster0.example.com', ['readPreference' => 'secondaryPreferred'] ); $client->test; $cursor = $db->command( [ 'createUser' => 'username', 'pwd' => 'password', 'roles' => ['readWrite'], ], [ 'readPreference' => new MongoDB\Driver\ReadPreference('primary'), ] ); var_dump($cursor->toArray()[0]);
이 경우 출력은 다음과 유사합니다:
object(MongoDB\Model\BSONDocument)#8 (1) { ["storage":"ArrayObject":private]=> array(1) { ["ok"]=> float(1) } }