JSON文件的Mongoimport

218

我有一个包含大约2000条记录的JSON文件。每个记录对应于Mongo数据库中的一个文档,格式如下:

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify: new Date("Fri May 11 15:05:42 2012"),
startTime: new Date("Thu May 31 15:59:39 2012"),
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}},

每个记录都在JSON文件中的一行上,唯一的换行符是在每个记录的末尾。因此,文档中的每一行都以“{jobID:”开头...我正在尝试使用以下命令将它们导入Mongo数据库:

mongoimport --db dbName --collection collectionName --file fileName.json

然而,我遇到了以下错误:
Sat Mar  2 01:26:12 Assertion: 10340:Failure parsing JSON string near: ,execModif
0x10059f12b 0x100562d5c 0x100562e9c 0x10025eb98 0x10000e643 0x100010b60 0x10055c4cc 0x1000014b7    
0x100001454 
 0   mongoimport                         0x000000010059f12b _ZN5mongo15printStackTraceERSo + 43
 1   mongoimport                         0x0000000100562d5c _ZN5mongo11msgassertedEiPKc + 204
 2   mongoimport                         0x0000000100562e9c _ZN5mongo11msgassertedEiRKSs + 12
 3   mongoimport                         0x000000010025eb98 _ZN5mongo8fromjsonEPKcPi + 1576
 4   mongoimport                         0x000000010000e643          
                                         _ZN6Import8parseRowEPSiRN5mongo7BSONObjERi + 2739
 5   mongoimport                         0x0000000100010b60 _ZN6Import3runEv + 7376
 6   mongoimport                         0x000000010055c4cc _ZN5mongo4Tool4mainEiPPc + 5436
 7   mongoimport                         0x00000001000014b7 main + 55
 8   mongoimport                         0x0000000100001454 start + 52
Sat Mar  2 01:26:12 exception:BSON representation of supplied JSON is too large: Failure parsing    
    JSON string near: ,execModif
Sat Mar  2 01:26:12 
Sat Mar  2 01:26:12 imported 0 objects
Sat Mar  2 01:26:12 ERROR: encountered 1941 errors

我不知道问题出在哪里。有人可以推荐一个解决方案吗?
20个回答

415

我使用以下查询成功解决了错误:

mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray

希望这对某人有所帮助。


35
“--jsonArray”是要解决的问题,对吗? - Dudo
10
这个命令的简写为:mongoimport -d <数据库名> -c <集合名> --jsonArray -f <文件名>.json - Navidot
3
有时需要输入用户名和密码才能使用 mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password 命令。 - Diego Andrés Díaz Espinoza
1
补充@DiegoAndrésDíazEspinoza的评论,我的情况是出现了“无法使用机制'SCRAM-SHA-1'进行身份验证”的错误。因此,在搜索后,我发现缺少关键字authenticationDatabase,如答案https://dev59.com/LVMH5IYBdhLWcg3w1Dr0#58067928中所述。 - Feroz Khan
对于未来的搜索者,您可能仍需要安装mongoimport:https://docs.mongodb.com/database-tools/installation/installation/ - Kaleb Coberly
显示剩余3条评论

68

试试这个,

mongoimport --db dbName --collection collectionName <fileName.json

例子,

mongoimport --db foo --collection myCollections < /Users/file.json
connected to: *.*.*.*
Sat Mar  2 15:01:08 imported 11 objects

问题是由于您的日期格式引起的。
我使用了相同的JSON,但修改了日期如下,它可以正常工作。
{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify:{"$date" : 1343779200000},
startTime:{"$date" : 1343779200000},
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}}

希望这能帮到你


我遇到了与问题中相同的错误... 您检查过这个导入吗? - Denis Nikanorov
我按照你建议的调整了日期,确实消除了那个特定的错误。但是现在我遇到了一个新的错误。下面是新的错误提示: - amber4478
你能粘贴新的 JSON 数据和你所使用的 Mongo 版本吗? - Srivatsa N
我通过在查询末尾添加--jsonArray来修复了错误。 - amber4478
如果.json文件所在的文件夹名称中包含空格,则需要在其周围使用""。例如: 这样不起作用,需要添加""来导入json文件。 D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json 找不到指定的文件。这样可以工作 D:\>mongoimport --db testimport --collection small_zip < "D:\Dev\test test\small_zips.json" 2016-04-17T18:32:34.328+0800 connected to: localhost 2016-04-17T18:32:34.610+0800 imported 200 documents - Abhijeet

29

使用mongoimport,您可以实现相同的功能。

mongoimport --db test --collection user --drop --file ~/downloads/user.json

其中,

test - Database name
user - collection name
user.json - dataset file

--drop表示如果集合已经存在,则删除该集合。


22

控制台:

mongoimport -d dbName -c collectionName dataFile.js 

8
你的语法在以下方面是完全正确的:
mongoimport --db dbName --collection collectionName --file fileName.json

请确保您在正确的文件夹中,或者提供完整的路径。


7
我使用了以下命令来导出数据库:
mongodump --db database_name --collection collection_name

以下命令对我来说可用于导入数据库。
mongorestore --db database_name path_to_bson_file

5

在MongoDB中导入JSON/CSV文件

  • 等待等待
  • 首先检查您的bin文件夹(C:\Program Files\MongoDB\Server\4.4\bin)中是否有mongoimport.exe文件,如果没有,则下载mongodb数据库工具(https://www.mongodb.com/try/download/database-tools)
  • 将已提取(解压缩)的文件(位于已解压缩的bin文件夹内)复制到bin文件夹(C:\Program Files\MongoDB\Server\4.4\bin)
  • 将您的json文件复制到bin文件夹(C:\Program Files\MongoDB\Server\4.4\bin)
  • 现在打开您的命令提示符并将其目录更改为bin
cd "C:\Program Files\MongoDB\Server\4.4\bin"

现在将其复制到您的命令提示符上。
mongoimport -d tymongo -c test --type json --file restaurants.json
  • d-数据库(tymongo-数据库名称),c-集合(test-collection名称)

CSV文件的用途

 mongoimport -d tymongo -c test --type csv --file database2.csv --headerline

3

在Windows系统下,你可以使用命令提示符 cmd。而在Ubuntu系统下,你需要输入以下命令来使用终端 terminal

mongoimport  -d  your_database_name  -c  your_collection_name  /path_to_json_file/json_file_name.json

当你打开mongo shell时,运行以下命令来检查你的数据库名称:

show databases

3
在另一个终端中运行导入命令。(不要在mongo shell内运行)
mongoimport --db test --collection user --drop --file ~/downloads/user.json

2
这个命令适用于未指定集合的情况。
mongoimport --db zips "\MongoDB 2.6 Standard\mongodb\zips.json"

执行命令后的Mongo shell
connected to: 127.0.0.1
no collection specified!
using filename 'zips' as collection.
2014-09-16T13:56:07.147-0400 check 9 29353
2014-09-16T13:56:07.148-0400 imported 29353 objects

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接