2013-07-25 6 views
0

Я новичок на Mongodb. На самом деле у меня есть тысячи файлов в разных папках. Все файлы включают данные json. Есть более 30 миллионов файлов. Поэтому я считаю, что лучший способ сохранить эти данные - это db на основе документа.Как импортировать несколько файлов JSON в Mongodb?

Я знаю Import more than 1 json file using mongoimport это сообщение. Однако для принятого ответа требуется коллекция, в которой есть имена файлов. Я не могу поместить 30 миллионов имен файлов в коллекцию ...

Как импортировать несколько json-файлов в Mongodb в Windows env?

ответ

1

Вам нужно будет написать сценарий на вашем любимом языке, который читает каждый файл, JSON-декодирует его, а затем вставляет их один за другим в MongoDB. В PHP, такой сценарий будет сродни:

<?php 
$f = glob("*.json"); 
$m = new MongoClient; 
$c = $m->myDb->myCollection; 

foreach ($f as $fileName) 
{ 
    $contents = json_decode(file_get_contents($fileName)); 
    $c->insert($contents); 
} 
?> 
0

Вы можете создать пакетный скрипт, который извлекает все файлы JSon в данной папке, а затем импортировать его в БД:

@echo off 
for %%f in (*.json) do (
"mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json) 

Надежда это help

1

Для всех, кто ищет кросс-платформенное решение, я создал небольшой скрипт perl, который сделает это. Он принимает аргумент базы данных и каталога и будет импортировать любые .json-файлы, которые он находит в каталоге mongodb. Если вы не дадите ему каталог, он просто использует ту, в которой вы сейчас находитесь. Мне нужно уточнить регулярное выражение, которое проверяет файлы .json, и я уверен, что это можно сделать с меньшим количеством кода, m новичок Perl monk), но это работает, и мне нравится Perl .. так, любому, кто находит это - наслаждайтесь.

#!/usr/bin/perl 
use strict; 
use warnings; 

#this is a script for enumerating over every json file in a folder and importing it into mongodb 

my ($database, $directoryPath) = @ARGV; 

if(! $database) { #check for required database argument 
    die "A database argument must be provided to the script. Ex: perl mongorestore.pl wasp"; 
} 

#if a directory path is not given in arguments, operate in the current directory. 
if(!$directoryPath) { 
    $directoryPath = '.'; 
} 

#open directory and import json files to mongo 
opendir my $dir, $directoryPath or die "Cannot open directory at path $directoryPath."; 
my @files = readdir $dir; 
importJSONToMongo(@files); 
closedir $dir; 

#subroutine that takes an array of json files and imports them to the given mongodb database 
sub importJSONToMongo { 
    foreach my $file (@_) { 
     if($file =~ /.json/) { #only import json files - need to make this regex better (it would match *.metadata.json and other extraneous files) 

     $file =~ /(^.+?)(?=\.)/; #capture the filename before the '.json' extension 
     system("mongoimport -d $database -c $1 --jsonArray --file $directoryPath/$1.json"); 
     } 
    } 
} 
Смежные вопросы