0

我是MongoDB的新手。实际上我在不同的文件夹中有数千个文件。所有文件都包含 json 数据。有超过 3000 万个文件。所以我认为存储这些数据的最佳方式是基于文档的数据库。

我知道 Import more than 1 json file using mongoimport this SO post。但是,接受的答案需要一个包含文件名的集合。我不能将 3000 万个文件名放在一个集合中......

如何在 Windows env 上将多个 json 文件导入 Mongodb?

4

4 回答 4

3

我一直在寻找解决方案 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\binC:\test\.

于 2019-08-15T07:39:23.940 回答
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 );
}
?>
于 2013-07-26T10:10:16.173 回答
1

您可以创建一个批处理脚本,该脚本获取给定文件夹中的所有 json 文件,然后将其导入数据库:

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

希望这可以帮助

于 2016-03-20T19:05:39.950 回答
1

对于正在寻找跨平台解决方案的任何人,我创建了一个小的 perl 脚本来执行此操作。它需要一个数据库和目录参数,并将在目录中找到的任何 .json 文件导入到 mongodb。如果您不给它一个目录,它只会使用您当前所在的目录。我需要稍微改进检查 .json 文件的正则表达式,我相信这可以用更少的代码来完成,(I'我是一个新手 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");
        }
    }
}
于 2017-06-27T02:38:04.783 回答