Как правильно проверить, существует ли коллекция? - PullRequest
0 голосов
/ 27 апреля 2019

Ранее я проверял, существует ли коллекция, запрашивая пространства имен.

Примерно так, чтобы проверить, существует ли "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.

Какой правильный способ сделать это независимым от механизма хранения и пригодным для использования в будущих версиях?

1 Ответ

0 голосов
/ 27 апреля 2019

listCollections имеет параметр filter, который можно использовать для ограничения возвращаемых коллекций.Это должно выглядеть примерно так: db.runCommand({"listCollections": 1, filter: {name: "foo" }});

...