PHP 7 MongoDB — удалить все базы данных

Я пытаюсь выполнить модульное тестирование моих методов mongodb, поэтому мне нужен метод tearDown () для очистки всей базы данных mongo после тестирования.

Вот функция:

public function tearDown()
{
$databases = $this->mongoClient->listDatabases();
foreach ($databases as $db) {
$db.dropDatabase();
}
}

Однако он не может увидеть метод на моем $ db.

Error: Call to undefined function Api\Test\Unit\dropDatabase()

Кажется, listDatabases () возвращает только некоторую информационную модель моих баз данных, а не сами базы данных:

/var/www/html/tests/backend/Service/MongoStorageTest.php:35:
class MongoDB\Model\DatabaseInfo#1563 (3) {
public $name =>
string(5) "local"public $sizeOnDisk =>
double(83886080)
public $empty =>
bool(false)
}

/var/www/html/tests/backend/Service/MongoStorageTest.php:35:
class MongoDB\Model\DatabaseInfo#1483 (3) {
public $name =>
string(2) "db"public $sizeOnDisk =>
double(83886080)
public $empty =>
bool(false)
}

Есть ли практический или простой способ действительно выбрать их или просто отбросить все одним методом?

0

Решение

метод бросить на самом деле на MongoClientи конечно есть getName() от MongoDB\Model\DatabaseInfo типы, которые возвращаются из listDatabases()

public function tearDown()
{
$databases = $this->mongoClient->listDatabases();
foreach ($databases as $db) {
$this->mongoClient->dropDatabase($db->getName());
}
}

По-другому вы могли бы selectDatabase() и использовать drop() метод на MongoDB \ База данных:

public function tearDown()
{
$databases = $this->mongoClient->listDatabases();
foreach ($databases as $db) {
$this->mongoClient->selectDatabase($db->getName())->drop();
}
}

Но, на мой взгляд, это немного более кратко, и первая форма кажется более выразительной.

Поскольку «база данных» является базовым контейнером для пространства имен, тогда фактически нет команды «отбросить все». Список и цикл в списке, как вы это делаете. Суть в том, если это не в «справочник команд», тогда такого нет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector