json文件的Mongoimport


173

我有一个包含约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

我不知道问题是什么。有人可以推荐解决方案吗?

Answers:


301

我可以使用以下查询解决错误:

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

希望这对某人有帮助。


28
--jsonArray是票,是吗?
Dudo 2014年

4
简短的形式mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json
亚当·法里纳

1
有时用户/密码是必需的mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
迭戈安德烈斯·迪亚斯·埃斯皮诺萨

添加到@DiegoAndrésDíazEspinoza注释中,在我的情况下,我收到“无法使用机制'SCRAM-SHA-1'进行身份验证”的错误。因此,在搜索之后,我发现它缺少authenticationDatabase答案stackoverflow.com/a/58067928/6791222中提到的关键字。
费罗兹·汗

61

试试这个,

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 2013年

需要使用""周围的.json,如果它包含文件夹名称中有空格。下面由Abhi回答 。例如, 这将不起作用,需要添加""到json文件位置以将其导入。 D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. 该作品 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

22

使用mongoimport可以达到相同的目的

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

哪里,

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

--drop 如果已经存在,则将其删除。


20

安慰:

mongoimport -d dbName -c collectionName dataFile.js 

6

我已经使用以下命令导出数据库

mongodump --db database_name --collection collection_name

下面的命令对我来说是导入数据库

mongorestore --db database_name path_to_bson_file

6

您的语法在以下方面看起来完全正确:

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

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


3

在另一个终端上运行import命令。(不在mongo shell中。)

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

3

在Windows中,您可以使用Command Prompcmd cmd,在Ubuntu中,您可以terminal通过键入以下命令来使用您的命令:

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

然后,当您打开mongo shell时,您将发现在运行以下命令时检查您的database_name:

show databases

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

1

我尝试过这样的事情,它实际上有效:

mongoimport --db dbName --file D:\KKK\NNN\100YWeatherSmall.data.json

1

当使用usrname和password的db时,这对我有效

mongoimport --db YOUR_DB --collection MyCollection --file /your_path/my_json_file.json -u my_user -p my_pass

没有用户名密码的数据库,请删除 -u my_user -p my_pass

我的样本json

{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677d"), 
    "empid" : NumberInt(1), 
    "name" : "Rahul"
}
{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677e"), 
    "empid" : NumberInt(2), 
    "name" : "Rahul"
}

1

解:-

mongoimport --db databaseName --collection tableName --file filepath.json

例:-

将您的文件放在管理文件夹中:

C:\Users\admin\tourdb\places.json

在您的终端上运行以下命令:

mongoimport --db tourdb --collection places --file ~/tourdb/places.json

输出:-

admin@admin-PC MINGW64 /
$ mongoimport --db tourdb --collection places --file ~/tourdb/places.json
2019-08-26T14:30:09.350+0530 connected to: localhost
2019-08-26T14:30:09.447+0530 imported 10 documents

有关更多链接


0

如果您尝试导出此测试集合:

> db.test.find()
{ "_id" : ObjectId("5131c2bbfcb94ddb2549d501"), "field" : "Sat Mar 02 2013 13:13:31 GMT+0400"}
{"_id" : ObjectId("5131c2d8fcb94ddb2549d502"), "field" : ISODate("2012-05-31T11:59:39Z")}

使用mongoexport(使用创建的第一个日期,使用创建Date(...)的第二个日期new Date(...)(如果使用ISODate(...)与第二行相同)),则mongoexport输出将如下所示:

{ "_id" : { "$oid" : "5131c2bbfcb94ddb2549d501" }, "field" : "Sat Mar 02 2013 13:13:31 GMT+0400" }
{ "_id" : { "$oid" : "5131c2d8fcb94ddb2549d502" }, "field" : { "$date" : 1338465579000 } }

因此,您应该使用相同的表示法,因为严格的JSON没有type Date( <date> )

另外,您的JSON无效:所有字段名称都必须用双引号引起来,但如果没有它们,mongoimport可以正常工作。

您可以在mongodb 文档此处找到其他信息。


我按照您的建议调整了日期,但确实消除了该特定错误。但是,现在我得到了一个新的。这是新的错误:'3月2日星期六15:22:07异常:提供的JSON的BSON表示太大:无法解析JSON字符串附近:data:“ 1949 Sat Mar 2 15:22:07 Sat Mar 2 15:22 :07导入了0个对象,3月2日星期六15:22:07错误:遇到34763错误'
amber4478 2013年

我认为这是再次犯错的错误sizeT:{data: "1949..."}}
Denis Nikanorov

0

可能的答案有些迟了,可能会对新人有所帮助。如果您有多个数据库实例:

mongoimport --host <host_name>:<host_port> --db <database_name> --collection <collection_name>  --file <path_to_dump_file> -u <my_user> -p <my_pass>

假设需要凭据,否则请删除此选项。


0
  1. 只需复制json文件的路径即可,例如“ C:\ persons.json”
  2. 转到C:\ Program Files \ MongoDB \ Server \ 4.2 \ bin
  3. 在该mongodb bin文件夹中打开cmd并运行此命令

mongoimport --jsonArray --db dbname--collection collectionName--文件FilePath

示例mongoimport --jsonArray --db learningmongo --collections person --file C:\ persons.json


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.