2013-03-02 23 views
78

Tôi có một tập tin json bao gồm khoảng 2000 hồ sơ. Mỗi bản ghi đó sẽ tương ứng với một tài liệu trong cơ sở dữ liệu Mongo được định dạng như sau:Mongoimport của tập tin 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: 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"}}, 

mỗi bản ghi là trên một dòng duy nhất trong tệp JSON, và ngắt dòng duy nhất là ở phần cuối của mỗi bản ghi. Do đó, mỗi dòng trong tài liệu bắt đầu với "{jobID:" ... Tôi cố gắng để nhập khẩu những thành một cơ sở dữ liệu Mongo sử dụng lệnh sau:

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

Tuy nhiên, tôi nhận được lỗi sau:

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 

Tôi không biết vấn đề là gì. Ai đó có thể đề xuất một giải pháp?

Trả lời

147

tôi đã có thể sửa lỗi bằng cách sử dụng truy vấn sau đây:

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

Hy vọng rằng đây là hữu ích cho một ai đó.

+13

' --jsonArray' là vé, đúng không? – Dudo

+0

@Mallanaga Vâng, điều đó cũng làm việc cho tôi –

+0

Tuyệt vời, đây chính xác là những gì tôi cần. – Feanaro

33

thử này,

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

Ví dụ,

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

Issue là do bạn định dạng ngày tháng.

tôi đã sử dụng cùng một JSON với ngày sửa đổi như dưới đây và nó làm việc

{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"}} 

hy vọng điều này giúp

+0

Tôi có lỗi giống như trong câu hỏi ... Đã kiểm tra việc nhập này? –

+0

Tôi đã điều chỉnh các ngày như bạn đã đề xuất và điều đó đã loại bỏ được lỗi cụ thể đó. Tuy nhiên, bây giờ tôi đang nhận được một cái mới. Đây là lỗi mới: – amber4478

+0

Bạn có thể dán JSON mới và bạn đang sử dụng phiên bản Mongo nào không? –

0

Nếu bạn cố gắng xuất bộ sưu tập bài kiểm tra này:

> 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")} 

với mongoexport (các ngày đầu tiên được tạo với Date(...) và ngày thứ hai được tạo bằng new Date(...) (nếu sử dụng ISODate(...) sẽ giống như ngày thứ hai dòng)) đầu ra để mongoexport sẽ trông như sau:

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

Vì vậy, bạn nên sử dụng các ký hiệu giống nhau, bởi vì nghiêm ngặt JSON không có loại Date(<date>).

Ngoài ra JSON của bạn không hợp lệ: tất cả các tên trường phải được đặt trong dấu ngoặc kép, nhưng mongoimport hoạt động tốt mà không có chúng.

Bạn có thể tìm thêm thông tin trong mongodb documentationhere.

+0

Tôi đã điều chỉnh ngày như bạn đã đề xuất và đã loại bỏ lỗi cụ thể đó. Tuy nhiên, bây giờ tôi đang nhận được một cái mới. Đây là lỗi mới: ' Sat Mar 2 15:22:07 ngoại lệ: Biểu thị BSON của JSON được cung cấp quá lớn: Không phân tích chuỗi JSON gần: dữ liệu: "1949 Sat Mar 2 15:22:07 Sat Mar 2 15:22:07 nhập 0 đối tượng Sat Mar 2 15:22:07 ERROR: gặp phải 34763 lỗi ' – amber4478

+0

Tôi nghĩ rằng đó là một lỗi khác được trả về trường 'sizeT: {data:" 1949 ... "}}' –

2

cú pháp của bạn xuất hiện hoàn toàn đúng trong:

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

Hãy chắc chắn rằng bạn đang ở trong thư mục đúng hoặc cung cấp đường dẫn đầy đủ.

1

Lệnh này hoạt động khi không có bộ sưu tập nào được chỉ định.

mongoimport --db zips "\MongoDB 2.6 Standard\mongodb\zips.json" 

Mongo vỏ sau khi thực hiện lệnh

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 
14

console:

mongoimport -d dbName -c collectionName dataFile.js 
2

Tôi đã sử dụng dưới lệnh cho xuất khẩu DB

mongodump --db database_name --collection collection_name 

và dưới lệnh làm việc cho tôi để nhập DB

mongorestore --db database_name path_to_bson_file 
1

Sử dụng mongoimport bạn có thể có thể đạt được cùng

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

nơi,

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

--drop là thả bộ sưu tập nếu đã tồn tại.

Các vấn đề liên quan