Docs Menu

데이터베이스 명령 실행

MongoDB PHP 라이브러리는 Client, DatabaseCollection 클래스 전반에 걸쳐 일반적인 데이터베이스 명령 에 대한 헬퍼 메서드를 제공합니다. 또한 MongoDB\Database::command() 메서드를 사용하여 헬퍼 메서드가 없는 데이터베이스 명령을 실행 수 있습니다.

메서드는 MongoDB\Database::command() 항상 MongoDB\ 드라이버\Cursor 를 반환합니다. 객체 , 명령 커서 를 통해 단일 결과 문서 와 여러 결과 를 반환 하는 명령 실행 을 지원 해야 하기 때문입니다 .

대부분의 데이터베이스 명령은 단일 결과 문서 를 반환하며, 이는 반환된 커서 를 배열 로 변환하고 첫 번째 요소에 액세스하여 얻을 수 있습니다. 다음 예시 에서는 명령을 실행하고 결과 문서 를 출력합니다.

<?php
$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() 를 사용합니다.

<?php
$database = (new MongoDB\Client)->test;
$cursor = $database->command(['listCollections' => 1]);
foreach ($cursor as $collection) {
echo $collection['name'], "\n";
}

출력은 다음과 비슷할 수 있습니다.

persons
posts
zips

참고

프로토콜 수준에서 커서 커서 에 필요한 필수 요소(예: 커서의 ID, 네임스페이스 및 첫 번째 결과 배치 (선택 사항))가 포함된 단일 결과 문서 를 반환합니다. 확장의 MongoDB\ 드라이버\ 관리자::executeCommand() 메서드가 이러한 응답을 감지하면 반복 가능한 명령 커서 를 생성하고 원시 결과 문서 대신 반환합니다. 필요한 경우 명령 모니터링 을 사용하여 원시 결과 문서를 계속 관찰할 수 있습니다.

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)을 지정합니다.

<?php
$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)
}
}