Передача разархивированных файлов в mongoimport - PullRequest
0 голосов
/ 30 августа 2018

У меня есть zip-архив с большим количеством JSON-файлов. Каждый из этих файлов JSON представляет собой массив объектов JSON, которые я хотел бы импортировать в коллекцию MongoDB. Моя идея состояла в том, чтобы использовать опцию конвейера unzip и отправить содержимое этих файлов непосредственно в mongoimport:

unzip -p archive.zip *.json | mongoimport -d db_name -c collection_name --jsonArray

Я ожидал, что поведение, похожее на то, что делает результат поиска: каждый файл обрабатывается правильно, как с помощью этой команды:

find . -type f -name "*.json" | zip archive.zip -@

Но это не так. Поскольку содержимое файлов выводится в std, у mongoimport есть проблема, потому что он получает начало массива из другого файла сразу после конца массива из предыдущего файла. Ничего промежуточного (кроме новой строки, я думаю), поэтому он останавливается.

Есть ли другой способ достичь моей цели?

1 Ответ

0 голосов
/ 31 августа 2018

Поскольку я не нашел однострочника, который отвечал бы моей проблеме (хотя я все еще считаю, что в sed или awk есть потенциал), я решил пойти с циклом while:

#!/bin/bash

ARCHIVE_FILE="archive.zip"
unzip -l $ARCHIVE_FILE | awk 'NR>3{print $4}' | while IFS= read file ; do
  unzip -p $ARCHIVE_FILE "$file" | mongoimport -d db_name -c collection_name --jsonArray;
done

Я предполагаю, что unzip -l имеет универсальный формат, что может быть не так, как это предлагается в комментариях к ответу к этому посту . Поэтому в будущем мне, возможно, понадобится добавить grep или sed поверх этого.

...