2013-03-11 40 views
5

Tôi đang cố gắng nhập ObjectId của Mongodb từ tệp CSV sử dụng mongoimport:Làm cách nào để nhập Mongodb ObjectId từ tệp CSV bằng cách sử dụng mongoimport?

Tôi đã thử mọi phương pháp kết hợp và thoát mà tôi có thể nghĩ nhưng không thể nhập ObjectId chính xác từ CSV.

Trước tiên, tôi đã thử nhập chính xác những gì tôi được xuất từ ​​MongoDB sang CSV. Tôi đang sử dụng MongoDB 2.2.1.

tôi vừa tạo ra hai bộ sưu tập và tham chiếu _id một tài liệu trong tài liệu khác:

use yourdb 
db.createCollection("student") 
db.createCollection("class") 
db.student.insert({"name":"Peter"}) 
db.student.find() returns { "_id" : ObjectId("5143af326d44e1ceb372121d"), "name" : "Peter" } 
db.class.insert({"student_id": ObjectId("5143af326d44e1ceb372121d"),"name":"II-4"}) 

Sau đó, tôi sử dụng lệnh mongoexport trong vỏ:

mongoexport -h localhost:3002 -d yourdb -c classes --csv -f student_id,name > export.txt 

Kết quả CSV trông như thế này:

student_id,name 
ObjectID(5143af326d44e1ceb372121d),"II-4" 

Sau đó, tôi đã nhập CSV kết quả bằng cách sử dụng:

mongoimport -h localhost:3002 -d yourdb -c class --type csv --file export.txt --headerline 

quering bộ sưu tập đẳng cấp bây giờ trở về:

db.class.find() 
{ "_id" : ObjectId("5143afc66d44e1ceb372121e"), "student_id" : ObjectId("5143af326d44e1ceb372121d"), "name" : "II-4" } 
{ "_id" : ObjectId("5143b44788df173ba096550e"), "student_id" : "ObjectID(5143af326d44e1ceb372121d)", "name" : "II-4" } 

Như bạn có thể thấy lĩnh vực student_id trong tài liệu thứ hai thực sự là một chuỗi và không MongoDB ObjectId.

Tôi sai về điều gì đó hoặc Mongo không thể nhập CSV được xuất riêng của mình ??

+0

Bạn đang mong đợi điều gì sẽ xảy ra và điều gì sẽ xảy ra? Bạn đang nhập trở lại vào cùng một bộ sưu tập trong ví dụ của bạn mà làm cho nó không rõ ràng. – JohnnyHK

+0

Tôi đang cố gắng nhập ObjectID của MongoDB từ csv và tôi chỉ nhận được các chuỗi được nhập vào MongoDB. Tôi đã thử nhập khẩu csv MongoDB của xuất khẩu nhưng điều đó đã không dẫn đến ObjectIDs. Có vẻ như không ai cố gắng nhập trường ObjectID từ tệp CSV bằng cách sử dụng mongoimport? – vladimirp

+0

Nó hoạt động tốt khi tôi thử điều này. Tệp test.csv thực tế của bạn có dòng tiêu đề chứa tên trường không? CSV mẫu của bạn không hiển thị nó. – JohnnyHK

Trả lời

3

Sự cố có thể được sao chép trong MongoDB 2.4.1.

Các tài liệu (http://docs.mongodb.org/manual/reference/mongoimport/) tiểu bang (nhấn mạnh của tôi):

Lưu ý Không sử dụng mongoimport và mongoexport ví dụ đầy đủ, sao lưu sản xuất vì họ sẽ không đáng tin cậy chụp kiểu dữ liệu thông tin. Sử dụng mongodump và mongorestore như được mô tả trong “Backup Chiến lược cho các hệ thống MongoDB” cho loại chức năng này.

Trong cuộc thảo luận này https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/RcnumM5QyxM một câu hỏi tương tự đã được trả lời như thế này:

Mongoimport với tsv hoặc csv thể chỉ chuỗi nhập khẩu và số và không phải bất kỳ loại khác quy định tại [1 ]. Nếu bạn muốn nhập các loại đó và nếu bạn có thể tạo JSON thay vì TSV cho tệp nhập , đó sẽ là một cách hay để thực hiện; nếu không, bạn có thể viết bước hậu xử lý chuyển đổi các chuỗi thành loại thích hợp MongoDB (dựa trên một số kiến ​​thức về loại giá trị cho trường được cho là ).

  • Dan

[1] http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON

+1

Vì vậy, nó không thể cuối cùng theo cách họ nghĩ rằng nó được. Cảm ơn Ronasta đã giải thích. – vladimirp

+0

Hướng dẫn về cách chuyển đổi tệp CSV của bạn sang JSON tương thích để duy trì các loại: http://stackoverflow.com/a/21298840/943833 – Roganartu

16

Đối với bất cứ ai có vấn đề này người ta đang cố gắng chèn ObjectIds từ JSON - nó rất nhiều IS có thể với một chút sửa đổi để các dữ liệu hiện có .

Thay thế:

{ "_id" : ObjectId("5143afc66d44e1ceb372121e"), 
    "student_id" : ObjectId("5143af326d44e1ceb372121d"), 
    "name" : "II-4" } 

Với:

{ "_id" : {"$oid":"5143afc66d44e1ceb372121e"}, 
    "student_id" : {"$oid":"5143af326d44e1ceb372121d"}, 
    "name" : "II-4" } 

Chỉ cần sử dụng một biểu thức chính quy để thay thế bọc ObjectId.

+2

Câu trả lời hay nhất! Nên xanh! – bora89

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