MongoDb — Экспорт базы данных в js-скрипт (аналогично экспорту в рокмонго)

Есть ли способ из командной строки, с помощью которого я могу сбросить базу данных MongoDb в файл javascript, который может быть интерпретирован оболочкой mongo? Я ищу способ сделать именно то, что делает функция экспорта RockMongo, но мне нужно иметь возможность вызывать ее из сценария командной строки. Я везде искал что-то, что делает это, но все, что я могу найти, это mongoexport и mongodump, которые, похоже, не делают то, что я хочу, поскольку они просто создают файлы JSON.

Причина, по которой мне нужно это сделать, заключается в том, что модулю MongoDb codeception требуется файл в этом формате для восстановления базы данных после каждого теста. Хочу написать скрипт для автоматизации этого процесса, чтобы не приходилось постоянно лазить по RockMongo и генерировать дамп.

Заранее спасибо!


person bb89    schedule 10.04.2015    source источник
comment
Я понятия не имею, что делает сценарий экспорта рок-монго (вы можете рассказать об этом подробнее), но используя mongoexport экспортирует JSON, а awk может переносить каждую строку во вставку или что-то в этом роде.   -  person Markus W Mahlberg    schedule 11.04.2015


Ответы (1)


На случай, если кто-то еще обнаружит это, я наконец нашел решение, которое работает для моего сценария. Мне пришлось принять предложение Маркуса и создать свое собственное решение, но я обнаружил команду mongodb под названием bsondump, которая значительно упростила задачу.

Итак, в моем сценарии я сначала использую mongodump для создания файла BSON моей коллекции.

mongodump --db mydb --collection mycollection --out - > mycollection.bson

Затем я использую bsondump, чтобы преобразовать его в JSON, который можно использовать в Режим оболочки

bsondump mycollection.bson > mycollection.json

Наконец, я использую PHP, поэтому в своем PHP-скрипте я перебираю этот json-файл и оборачиваю каждую строку оператором вставки.

$lines = file('mycollection.json');
$inserts = [];

foreach($lines as $line)
{
    $inserts[] = 'db.getCollection("mycollection").insert(' . trim($line) . ');' . PHP_EOL;
}

file_put_contents('output.js', $inserts);

Я предполагаю, что, вероятно, есть лучший способ сделать это, но пока это работает хорошо для меня. Спасибо, что направил меня в правильном направлении, Маркус!

person bb89    schedule 14.04.2015