我是Mongodb的新手。实际上我在不同的文件夹中有数千个文件。所有文件都包含json数据。有超过3000万个文件。所以我认为存储这些数据的最佳方式是基于文档的数据库。
我知道 Import more than 1 json file using mongoimport这个SO帖子。但是,接受的答案需要一个包含文件名的集合。我不能把30万个文件名放在一个集合中......
如何在Windows环境中将多个json文件导入Mongodb?
答案 0 :(得分: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 );
}
?>
答案 1 :(得分:1)
对于任何搜索跨平台解决方案的人来说,我创建了一个可以执行此操作的perl脚本。它需要一个数据库和目录参数,并将它在目录中找到的任何.json文件导入到mongodb。如果你不给它一个目录,它只使用你当前所在的目录。我需要优化一下检查.json文件的正则表达式,我确信这可以用更少的代码来完成,(我是新手Perl和尚),但这很有效,我喜欢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");
}
}
}
答案 2 :(得分:1)
我一直在寻找解决方案2天,这是对我有用的解决方案:
C:\MongoDB\Server\3.0\bin>
for %i in (C:\test\*) do
mongoimport --file %i --type json --db mydb --collection mycollection
您只需将此代码复制并粘贴到cmd中,然后更改文件目录C:\MongoDB\Server\3.0\bin
和C:\test\
。
答案 3 :(得分:0)
您可以创建一个批处理脚本来获取给定文件夹中的所有json文件,然后将其导入db:
@echo off
for %%f in (*.json) do (
"mongoimport.exe" --jsonArray --db databasename --collection collectioname --file %%~nf.json )
希望这有帮助