Ранее я проверял, существует ли коллекция, запрашивая пространства имен.
Примерно так, чтобы проверить, существует ли "foo.bar":
return 1 === $client->selectCollection('foo','system.namespaces');
->count(['name'=>'bar']);
Поскольку это работает только сmmapv1
и я перешел на wiredTiger
, я попробовал это вместо этого, полагаясь на драйвер, выбрасывающий либо «База данных foo не существует», либо «Панель сбора не существует».
try {
$command = new MongoDB\Driver\Command(['listIndexes'=>'bar']);
$server->executeReadCommand('foo',$command);
return true;
}
catch( MongoDB\Driver\Exception\CommandException $e ){
return false;
}
Я не хочу перечислять коллекций, так как их тысячи, но мне не нравится полагаться на исключение, так как я замечаю, что сообщение об ошибке изменилось при переходе с 3.6 на 4.0.
Какой правильный способ сделать это независимым от механизма хранения и пригодным для использования в будущих версиях?