Mongoimport của tập tin json


173

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:

{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 nằm trên một dòng trong tệp JSON và các ngắt dòng duy nhất nằm ở cuối mỗi bản ghi. Do đó, mỗi dòng trong tài liệu bắt đầu bằng "{jobID:" ... Tôi đang cố gắng nhập chúng vào cơ sở dữ liệu mongo bằ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ể đề nghị một giải pháp?

Câu trả lời:


301

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

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

Hy vọng điều này hữu ích cho ai đó.


28
--jsonArrayLà vé, có?
Dudo

4
Hình thức ngắn này mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna

1
đôi khi người dùng / mật khẩu được yêu cầumongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza

Thêm vào bình luận @ DiegoAndrésDíazEspinoza, rằng trong trường hợp của tôi, tôi đã gặp lỗi "không thể xác thực bằng cơ chế 'SCRAM-SHA-1'". Vì vậy, sau khi tìm kiếm, tôi thấy rằng nó bị thiếu từ khóa authenticationDatabasenhư được đề cập trong câu trả lời stackoverflow.com/a/58067928/6791222 .
Feroz Khan

61

thử cái này,

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

Thí dụ,

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

Vấn đề là do định dạng ngày của bạn.

Tôi đã sử dụng cùng JSON với ngày sửa đổi như dưới đây và nó đã hoạt động

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

hi vọng điêu nay co ich


Tôi có lỗi tương tự như trong câu hỏi ... Đã kiểm tra lần nhập này chưa?
Denis Nikanorov

Tôi đã điều chỉnh ngày như bạn đề xuất và điều đó đã thoát khỏi 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

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

Tôi đã có thể sửa lỗi bằng cách thêm --jsonArray vào cuối truy vấn.
amber4478

Cần sử dụng ""xung quanh .json, nếu nó chứa tên thư mục có khoảng trắng trong đó. Đã trả lời bởi Abhi bên dưới Ví dụ: Điều này sẽ không hoạt động, cần thêm ""vào vị trí tệp json để nhập nó. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Tác phẩm này 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

Sử dụng mongoimport bạn có thể đạt được điều tương tự

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

Ở đâu,

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

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


20

bảng điều khiển:

mongoimport -d dbName -c collectionName dataFile.js 

6

Tôi đã sử dụng lệnh dưới đây để xuất DB

mongodump --db database_name --collection collection_name

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

mongorestore --db database_name path_to_bson_file

6

Cú pháp của bạn xuất hiện hoàn toàn chính xác trong:

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

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


3

Chạy lệnh nhập trong một thiết bị đầu cuối khác. (không phải bên trong vỏ mongo.)

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

3

Trong windows bạn có thể sử dụng Command Prompcmd cmd, trong Ubuntu bạn có thể sử dụng lệnh của mình terminalbằng cách gõ lệnh sau:

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

sau đó khi bạn mở shell mongo, bạn sẽ tìm thấy để kiểm tra cơ sở dữ liệu của bạn khi chạy lệnh này:

show databases

2

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

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

Vỏ Mongo 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

1

Tôi đã thử một cái gì đó như thế này và nó thực sự hoạt động:

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

1

Điều này hoạt động với tôi khi db với usrname và mật khẩu

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

db không có mật khẩu tên người dùng vui lòng xóa -u my_user -p my_pass

Mẫu của tôi

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

1

Giải pháp:-

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

Thí dụ:-

Đặt tệp của bạn vào thư mục quản trị: -

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

Chạy lệnh này trên teminal của bạn: -

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

Đầu ra: -

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

Để biết thêm liên kết


0

Nếu bạn cố gắng xuất bộ sưu tập thử nghiệm 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 (ngày đầu tiên được tạo bằng Date(...)và ngày thứ hai được tạo bằng new Date(...)(nếu sử dụng ISODate(...)sẽ giống như trong dòng thứ hai)) vì vậy đầu ra mongoexport sẽ trông như thế này:

{ "_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ùng một ký hiệu, bởi vì JSON nghiêm ngặt không có loại Date( <date> ).

Ngoài ra JSON của bạn không hợp lệ: tất 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 tài liệu mongodb và tại đây .


Tôi đã điều chỉnh ngày như bạn đề xuất và điều đó đã thoát khỏi 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ệ: Đại diện BSON của JSON được cung cấp quá lớn: Thất bại trong việc phân tích chuỗi JSON gần: data: "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 LRI: gặp phải 34763 lỗi '
amber4478

Tôi nghĩ đó là một lỗi khác được trả lại cho lĩnh vực nàysizeT:{data: "1949..."}}
Denis Nikanorov

0

Một chút muộn cho câu trả lời có thể xảy ra, có thể giúp những người mới. Trong trường hợp bạn có nhiều phiên bản của cơ sở dữ liệu:

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

Giả sử thông tin cần thiết, nếu không loại bỏ tùy chọn này.


0
  1. Chỉ cần sao chép đường dẫn của tệp json như ví dụ "C: \ Person.json"
  2. đi tới C: \ Tệp chương trình \ MongoDB \ Server \ 4.2 \ bin
  3. mở cmd trên thư mục bin mongodb và chạy lệnh này

mongoimport --jsonArray --db dbname - bộ sưu tậpNameName - tệp FilePath

ví dụ mongoimport --jsonArray --db learnmongo - người thu thập --file C: \ Person.json


0

Số câu trả lời đã được đưa ra mặc dù tôi muốn đưa ra mệnh lệnh của tôi. Tôi đã từng thường xuyên. Nó có thể giúp cho một ai đó.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.