Hướng dẫn how do i import a collection in mongodb? - làm cách nào để nhập một bộ sưu tập trong mongodb?

Bất kể bạn đang xây dựng gì với MongoDB, đến một lúc nào đó bạn sẽ muốn nhập một số dữ liệu. Cho dù đó là phần lớn dữ liệu của bạn hoặc chỉ một số dữ liệu tham chiếu mà bạn muốn tích hợp với bộ dữ liệu chính của mình, bạn sẽ thấy mình với một loạt các tệp JSON hoặc CSV mà bạn cần nhập vào một bộ sưu tập. May mắn thay, MongoDB cung cấp một công cụ gọi là Mongoimport được thiết kế cho nhiệm vụ này. Hướng dẫn này sẽ giải thích cách sử dụng Mongoimport hiệu quả để đưa dữ liệu của bạn vào cơ sở dữ liệu MongoDB của bạn.mongoimport which is designed for this task. This guide will explain how to effectively use mongoimport to get your data into your MongoDB database.

Chúng tôi cũng cung cấp tài liệu tham khảo Mongoimport, nếu bạn đang tìm kiếm một cái gì đó toàn diện hoặc bạn chỉ cần tìm kiếm một tùy chọn dòng lệnh.MongoImport Reference documentation, if you're looking for something comprehensive or you just need to look up a command-line option.

Điều kiện tiên quyết

Hướng dẫn này giả định rằng bạn có thể thoải mái một cách hợp lý với dòng lệnh. Hầu hết các hướng dẫn sẽ chỉ chạy các lệnh, nhưng đến cuối cùng, tôi sẽ chỉ ra cách thực hiện dữ liệu thông qua một số công cụ dòng lệnh, chẳng hạn như jq.jq.

Nếu bạn không có nhiều kinh nghiệm trên dòng lệnh (đôi khi cũng được gọi là thiết bị đầu cuối, hoặc shell hoặc bash), tại sao không làm theo cùng với một số ví dụ? Đó là một cách tuyệt vời để bắt đầu.

Các ví dụ được hiển thị đều được viết trên macOS, nhưng nên chạy trên bất kỳ hệ thống loại UNIX nào. Nếu bạn đang chạy trên Windows, tôi khuyên bạn nên chạy các lệnh ví dụ bên trong hệ thống con Windows cho Linux.Windows Subsystem for Linux.

Bạn sẽ cần một cơ sở dữ liệu MongoDB tạm thời để kiểm tra các lệnh này. Nếu bạn mới bắt đầu, tôi khuyên bạn nên đăng ký tài khoản Atlas MongoDB miễn phí và sau đó chúng tôi sẽ chăm sóc cụm cho bạn!MongoDB Atlas account, and then we'll take care of the cluster for you!

Và tất nhiên, bạn sẽ cần một bản sao của mongoimport. Nếu bạn đã cài đặt MongoDB trên máy trạm của mình thì bạn có thể đã cài đặt mongoimport. Nếu không, hãy làm theo các hướng dẫn này trên trang web MongoDB để cài đặt nó.mongoimport. If you have MongoDB installed on your workstation then you may already have mongoimport installed. If not, follow these instructions on the MongoDB website to install it.

Bắt đầu với

mongoimport

mongoimport là một công cụ dòng lệnh mạnh mẽ để nhập dữ liệu từ các tệp JSON, CSV và TSV vào các bộ sưu tập MongoDB. Đó là siêu nhanh và nhiều luồng, vì vậy trong nhiều trường hợp sẽ nhanh hơn bất kỳ tập lệnh tùy chỉnh nào bạn có thể viết để làm điều tương tự. mongoimport Sử dụng có thể được kết hợp với một số công cụ dòng lệnh khác, chẳng hạn như jq cho thao tác JSON hoặc csvkit để thao tác CSV hoặc thậm chí curl để tải xuống các tệp dữ liệu từ máy chủ trên Internet. Như với nhiều công cụ dòng lệnh, các tùy chọn là vô tận! is a powerful command-line tool for importing data from JSON, CSV, and TSV files into MongoDB collections. It's super-fast and multi-threaded, so in many cases will be faster than any custom script you might write to do the same thing. mongoimport use can be combined with some other command-line tools, such as jq for JSON manipulation, or csvkit for CSV manipulation, or even curl for dynamically downloading data files from servers on the internet. As with many command-line tools, the options are endless!

Chọn định dạng dữ liệu nguồn

Theo nhiều cách, việc có dữ liệu nguồn của bạn trong các tệp JSON tốt hơn CSV (và TSV). JSON vừa là định dạng dữ liệu phân cấp, như tài liệu MongoDB và cũng rõ ràng về các loại dữ liệu mà nó mã hóa. Mặt khác, dữ liệu JSON nguồn có thể khó xử lý - trong nhiều trường hợp, nó không nằm trong cấu trúc bạn muốn hoặc nó có dữ liệu số được mã hóa dưới dạng chuỗi hoặc có lẽ các định dạng ngày không ở dạng mongoimport chấp nhận.mongoimport accepts.

Dữ liệu CSV (và TSV) là bảng và mỗi hàng sẽ được nhập vào MongoDB dưới dạng tài liệu riêng biệt. Điều này có nghĩa là các định dạng này không thể hỗ trợ dữ liệu phân cấp theo cách tương tự như tài liệu MongoDB có thể. Khi nhập dữ liệu CSV vào MongoDB, mongoimport sẽ cố gắng đưa ra các lựa chọn hợp lý khi xác định loại trường cụ thể, chẳng hạn như mongoimport1 hoặc mongoimport2. Hành vi này có thể được ghi đè với việc sử dụng một số cờ và bạn có thể chỉ định các loại nếu bạn muốn. Trên hết, mongoimport cung cấp một số cơ sở cho ngày phân tích cú pháp và các loại khác ở các định dạng khác nhau.mongoimport will attempt to make sensible choices when identifying the type of a specific field, such as mongoimport1 or mongoimport2. This behaviour can be overridden with the use of some flags, and you can specify types if you want to. On top of that, mongoimport supplies some facilities for parsing dates and other types in different formats.

Trong nhiều trường hợp, việc lựa chọn định dạng dữ liệu nguồn sẽ không tùy thuộc vào bạn - sẽ tùy thuộc vào tổ chức tạo dữ liệu và cung cấp cho bạn. Tôi khuyên bạn nên nếu dữ liệu nguồn ở dạng CSV thì bạn không nên cố gắng chuyển đổi nó thành JSON trước khi bạn có kế hoạch tái cấu trúc nó.

Liên kết

mongoimport

đến cơ sở dữ liệu của bạn

Phần này giả định rằng bạn đang kết nối với một thiết lập tương đối đơn giản - với cơ sở dữ liệu xác thực mặc định và một số xác thực được thiết lập. (Bạn nên luôn luôn tạo một số người dùng để xác thực!)alwayscreate some users for authentication!)

Nếu bạn không cung cấp bất kỳ chi tiết kết nối nào cho Mongoimport, nó sẽ cố gắng kết nối với MongoDB trên máy cục bộ của bạn, trên cổng 27017 (là mặc định của MongoDB). Điều này giống như cung cấp mongoimport5.mongoimport5.

Một uri để cai trị tất cả

Có một số tùy chọn cho phép bạn cung cấp thông tin kết nối riêng cho Mongoimport, nhưng tôi khuyên bạn nên sử dụng tùy chọn mongoimport6. Nếu bạn đang sử dụng Atlas, bạn có thể nhận URI kết nối phù hợp từ giao diện Atlas, bằng cách nhấp vào nút "Kết nối" của cụm và chọn "Kết nối ứng dụng của bạn". .mongoimport6 option. If you're using Atlas you can get the appropriate connection URI from the Atlas interface, by clicking on your cluster's "Connect" button and selecting "Connect your Application". (Atlas is being continuously developed, so these instructions may be slightly out of date.) Set the URI as the value of your mongoimport6 option, and replace the username and password with the appropriate values:

Hướng dẫn how do i import a collection in mongodb? - làm cách nào để nhập một bộ sưu tập trong mongodb?

Xin lưu ý rằng trong mẫu này, tên người dùng và mật khẩu phải được mã hóa URL. Nếu bạn không muốn lo lắng về điều này, thì hãy cung cấp tên người dùng và mật khẩu bằng các tùy chọn mongoimport8 và mongoimport9 thay thế: thay vào đó: that in this form the username and password must be URL-encoded. If you don't want to worry about this, then provide the username and password using the mongoimport8 and mongoimport9 options instead:

Nếu bạn bỏ qua mật khẩu từ URI và không cung cấp tùy chọn mongoimport9, thì mongoimport sẽ nhắc bạn nhận mật khẩu trên dòng lệnh. Trong tất cả các trường hợp này, sử dụng các trích dẫn đơn xung quanh các giá trị, như tôi đã thực hiện, sẽ giúp bạn tiết kiệm các vấn đề trong thời gian dài!mongoimport9 option, then mongoimport will prompt you for a password on the command-line. In all these cases, using single-quotes around values, as I've done, will save you problems in the long-run!

Nếu bạn không kết nối với cơ sở dữ liệu ATLAS, thì bạn sẽ phải tạo URI của riêng mình. Nếu bạn đang kết nối với một máy chủ duy nhất (tức là bạn không có bản sao), thì URI của bạn sẽ trông như thế này: mongoimport2. Nếu bạn đang chạy một bản sao (và bạn nên!) Sau đó, bạn có nhiều tên máy chủ để kết nối và bạn không biết trước đó là cái chính. Trong trường hợp này, URI của bạn sẽ bao gồm một loạt các máy chủ trong cụm của bạn (bạn không cần cung cấp tất cả các máy chủ của cụm của bạn, cung cấp một trong số chúng có sẵn) và Mongoimport sẽ tự động khám phá và kết nối với chính. Một URI bản sao trông như thế này: mongoimport3.not connecting to an Atlas database, then you'll have to generate your own URI. If you're connecting to a single server (i.e. you don't have a replicaset), then your URI will look like this: mongoimport2. If you're running a replicaset (and you should!) then you have more than one hostname to connect to, and you don't know in advance which is the primary. In this case, your URI will consist of a series of servers in your cluster (you don't need to provide all of your cluster's servers, providing one of them is available), and mongoimport will discover and connect to the primary automatically. A replicaset URI looks like this: mongoimport3.

Khi bạn đã xác định URI, thì niềm vui bắt đầu. Trong phần còn lại của hướng dẫn này, tôi sẽ bỏ những lá cờ đó ra. Bạn sẽ cần thêm chúng vào khi thử các tùy chọn khác nhau.

Nhập một tài liệu JSON

Cách đơn giản nhất để nhập một tệp duy nhất vào MongoDB là sử dụng tùy chọn mongoimport4 để chỉ định một tệp. Theo tôi, tình huống tốt nhất là bạn có một thư mục đầy đủ các tệp JSON cần được nhập. Lý tưởng nhất là mỗi tệp JSON chứa một tài liệu bạn muốn nhập vào MongoDB, nó nằm trong cấu trúc chính xác và mỗi giá trị thuộc loại chính xác. Sử dụng tùy chọn này khi bạn muốn nhập một tệp duy nhất làm tài liệu duy nhất vào bộ sưu tập MongoDB.mongoimport4 option to specify a file. In my opinion, the very best situation is that you have a directory full of JSON files which need to be imported. Ideally each JSON file contains one document you wish to import into MongoDB, it's in the correct structure, and each of the values is of the correct type. Use this option when you wish to import a single file as a single document into a MongoDB collection.

Bạn sẽ tìm thấy dữ liệu ở định dạng này trong thư mục 'File_per_document' trong repo data data data. Mỗi tài liệu sẽ trông như thế này:sample data GitHub repo. Each document will look like this:

Lệnh trên sẽ nhập tất cả các tệp JSON vào bộ sưu tập mongoimport5. Bạn không cần phải tạo bộ sưu tập trước.mongoimport5. You don't have to create the collection in advance.

Hướng dẫn how do i import a collection in mongodb? - làm cách nào để nhập một bộ sưu tập trong mongodb?
Tài liệu nhập khẩu, được xem trong La bàn MongoDB

Nếu bạn sử dụng Compass MongoDB hoặc một công cụ khác để kết nối với bộ sưu tập bạn vừa tạo, bạn sẽ thấy MongoDB cũng tạo ra giá trị mongoimport6 trong mỗi tài liệu cho bạn. Điều này là do MongoDB yêu cầu mọi tài liệu phải có một mongoimport6 duy nhất, nhưng bạn đã không cung cấp một tài liệu. Tôi sẽ đề cập nhiều hơn về điều này trong thời gian ngắn.MongoDB Compass or another tool to connect to the collection you just created, you'll see that MongoDB also generated an mongoimport6 value in each document for you. This is because MongoDB requires every document to have a unique mongoimport6, but you didn't provide one. I'll cover more on this shortly.

Nhập nhiều tài liệu JSON

Mongoimport sẽ chỉ nhập một tệp tại một thời điểm với tùy chọn mongoimport4, nhưng bạn có thể hiểu được điều này bằng cách đưa nhiều tài liệu JSON vào Mongoimport từ một công cụ khác, chẳng hạn như mongoimport9. Điều này nhanh hơn là nhập một tệp tại một thời điểm, chạy Mongoimport từ một vòng lặp, vì bản thân Mongoimport được đa luồng để tải lên nhanh hơn của nhiều tài liệu. Với một thư mục chứa đầy các tệp JSON, trong đó mỗi tệp JSON phải được nhập dưới dạng tài liệu MongoDB riêng biệt có thể được nhập bằng ____ 30-ing vào thư mục chứa các tệp JSON và chạy:mongoimport4 option, but you can get around this by piping multiple JSON documents into mongoimport from another tool, such as mongoimport9. This is faster than importing one file at a time, running mongoimport from a loop, as mongoimport itself is multithreaded for faster uploads of multiple documents. With a directory full of JSON files, where each JSON file should be imported as a separate MongoDB document can be imported by mongoimport0-ing to the directory that contains the JSON files and running:

Như trước đây, MongoDB tạo ra một mongoimport6 mới cho mỗi tài liệu được chèn vào bộ sưu tập MongoDB, vì chúng không có trong dữ liệu nguồn.mongoimport6 for each document inserted into the MongoDB collection, because they're not contained in the source data.

Nhập một mảng json lớn

Đôi khi bạn sẽ có nhiều tài liệu có trong mảng JSON trong một tài liệu, giống như sau:

Bạn có thể nhập dữ liệu ở định dạng này bằng tùy chọn mongoimport4, sử dụng tùy chọn mongoimport3:mongoimport4 option, using the mongoimport3 option:

Nếu bạn quên thêm tùy chọn --JsonArray, mongoimport sẽ thất bại với lỗi "Không thể giải mã mảng vào tài liệu." Điều này là do các tài liệu tương đương với các đối tượng JSON, không phải mảng. Bạn có thể lưu trữ một mảng dưới dạng _value_ trên một tài liệu, nhưng một tài liệu không thể là một mảng.mongoimport will fail with the error "cannot decode array into a Document." This is because documents are equivalent to JSON objects, not arrays. You can store an array as a _value_ on a document, but a document cannot be an array.

Nhập các loại cụ thể của MongoDB với JSON

Nếu bạn nhập một số dữ liệu JSON từ repo dữ liệu mẫu và sau đó xem lược đồ của bộ sưu tập trong la bàn, bạn có thể nhận thấy một vài vấn đề:sample data github repo and then view the collection's schema in Compass, you may notice a couple of problems:

  • Các giá trị của mongoimport5 và mongoimport6 phải là các loại "ngày" chứ không phải "chuỗi".mongoimport5 and mongoimport6 should be "date" types, not "string".

  • MongoDB hỗ trợ các điểm địa lý, nhưng không nhận ra sự vĩ độ và kinh độ của các trạm bắt đầu và dừng các trạm như vậy.

Điều này xuất phát từ một sự khác biệt cơ bản giữa các tài liệu MongoDB và tài liệu JSON. Mặc dù các tài liệu MongoDB thường trông giống như dữ liệu JSON, nhưng chúng không phải vậy. MongoDB lưu trữ dữ liệu dưới dạng BSON. BSON có nhiều lợi thế so với JSON. Nó nhỏ gọn hơn, nó nhanh hơn để vượt qua và nó hỗ trợ nhiều loại hơn JSON. Trong số các loại đó là ngày, loại Geojson, dữ liệu nhị phân và số thập phân. Tất cả các loại được liệt kê trong tài liệu MongoDBlook like JSON data, they're not. MongoDB stores data as BSON. BSON has multiple advantages over JSON. It's more compact, it's faster to traverse, and it supports more types than JSON. Among those types are Dates, GeoJSON types, binary data, and decimal numbers. All the types are listed in the MongoDB documentation

Nếu bạn muốn MongoDB nhận ra các trường được nhập từ JSON dưới dạng các loại BSON cụ thể, các trường đó phải được thao tác để chúng tuân theo một cấu trúc mà chúng tôi gọi là JSON mở rộng. Điều này có nghĩa là trường sau:Extended JSON. This means that the following field:

Phải được cung cấp cho MongoDB như:

để nó được công nhận là loại ngày. Lưu ý rằng định dạng của chuỗi ngày đã thay đổi một chút, với 'T' phân tách ngày và thời gian và z ở cuối, biểu thị thời gian UTC.Date type. Note that the format of the date string has changed slightly, with the 'T' separating the date and time, and the Z at the end, indicating UTC timezone.

Tương tự, vĩ độ và kinh độ phải được chuyển đổi thành loại điểm Geojson nếu bạn muốn tận dụng khả năng tìm kiếm dữ liệu vị trí của MongoDB. Hai giá trị:

Lưu ý: cặp giá trị là kinh độ sau đó vĩ độ, vì điều này đôi khi khiến mọi người ra ngoài!: the pair of values are longitude then latitude, as this sometimes catches people out!

Khi bạn có dữ liệu không gian địa lý trong bộ sưu tập của mình, bạn có thể sử dụng các truy vấn không gian địa lý của MongoDB để tìm kiếm dữ liệu theo vị trí.geospatial queries to search for data by location.

Nếu bạn cần chuyển đổi dữ liệu JSON của mình theo cách này, hãy xem phần trên JQ.JQ.

Nhập dữ liệu vào các bộ sưu tập không trống

Khi nhập dữ liệu vào một bộ sưu tập đã chứa tài liệu, giá trị mongoimport6 của bạn rất quan trọng. Nếu các tài liệu đến của bạn không chứa các giá trị mongoimport6, thì các giá trị mới sẽ được tạo và gán cho các tài liệu mới khi chúng được thêm vào bộ sưu tập. Nếu các tài liệu đến của bạn có chứa các giá trị mongoimport6, thì chúng sẽ được kiểm tra đối với các tài liệu hiện có trong bộ sưu tập. Giá trị mongoimport6 phải là duy nhất trong một bộ sưu tập. Theo mặc định, nếu tài liệu đến có giá trị mongoimport6 đã tồn tại trong bộ sưu tập, thì tài liệu sẽ bị từ chối và lỗi sẽ được ghi lại. Chế độ này (mặc định) được gọi là "Chế độ chèn". Tuy nhiên, có các chế độ khác hoạt động khác nhau khi một tài liệu phù hợp được nhập bằng mongoimport.mongoimport6 value is important. If your incoming documents don't contain mongoimport6 values, then new values will be created and assigned to the new documents as they are added to the collection. If your incoming documents do contain mongoimport6 values, then they will be checked against existing documents in the collection. The mongoimport6 value must be unique within a collection. By default, if the incoming document has an mongoimport6 value that already exists in the collection, then the document will be rejected and an error will be logged. This mode (the default) is called "insert mode". There are other modes, however, that behave differently when a matching document is imported using mongoimport.

Cập nhật hồ sơ hiện có

Nếu bạn được định kỳ cung cấp các tệp dữ liệu mới, bạn có thể sử dụng mongoimport để cập nhật hiệu quả dữ liệu trong bộ sưu tập của mình. Nếu dữ liệu đầu vào của bạn được cung cấp một mã định danh ổn định, hãy sử dụng trường đó làm trường mongoimport6 và cung cấp tùy chọn mongoimport5. Chế độ này Willinsert một tài liệu mới nếu giá trị mongoimport6 hiện không có trong bộ sưu tập. Nếu giá trị mongoimport6 đã tồn tại trong một tài liệu, thì tài liệu đó sẽ bị ghi đè bởi dữ liệu tài liệu mới.mongoimport to efficiently update the data in your collection. If your input data is supplied with a stable identifier, use that field as the mongoimport6 field, and supply the option mongoimport5. This mode willinsert a new document if the mongoimport6 value is not currently present in the collection. If the mongoimport6 value already exists in a document, then that document will be overwritten by the new document data.

Nếu bạn đang nâng các bản ghi không có ID ổn định, bạn có thể chỉ định một số trường sẽ sử dụng để khớp với các tài liệu trong bộ sưu tập, với tùy chọn mongoimport8. Nếu bạn đang sử dụng nhiều tên trường, hãy tách các giá trị này bằng dấu phẩy:mongoimport8 option. If you're using more than one field name, separate these values with a comma:

Hợp nhất dữ liệu vào các hồ sơ hiện có

Nếu bạn được cung cấp với các tệp dữ liệu mở rộng các tài liệu hiện tại của bạn bằng cách thêm các trường mới hoặc cập nhật một số trường nhất định, bạn có thể sử dụng mongoimport với "Chế độ hợp nhất". Nếu dữ liệu đầu vào của bạn được cung cấp một mã định danh ổn định, hãy sử dụng trường đó làm trường mongoimport6 và cung cấp tùy chọn mongoimport1. Chế độ này sẽ chèn một tài liệu mới nếu giá trị mongoimport6 hiện không có trong bộ sưu tập. Nếu giá trị mongoimport6 đã tồn tại trong một tài liệu, thì tài liệu đó sẽ bị ghi đè bởi dữ liệu tài liệu mới.extend your existing documents by adding new fields, or update certain fields, you can use mongoimport with "merge mode". If your input data is supplied with a stable identifier, use that field as the mongoimport6 field, and supply the option mongoimport1. This mode will insert a new document if the mongoimport6 value is not currently present in the collection. If the mongoimport6 value already exists in a document, then that document will be overwritten by the new document data.

Bạn cũng có thể sử dụng tùy chọn mongoimport8 ở đây cũng như khi bạn đang thực hiện UPSERT, để phù hợp với các tài liệu bạn muốn cập nhật.mongoimport8 option here as well as when you're doing upserts, to match the documents you want to update.

Nhập CSV (hoặc TSV) vào một bộ sưu tập

Nếu bạn có các tệp CSV (hoặc các tệp TSV - chúng giống nhau về mặt khái niệm) để nhập, hãy sử dụng tùy chọn mongoimport5 hoặc mongoimport6 để nói mongoimport định dạng nào sẽ xảy ra. Cũng quan trọng là phải biết liệu tệp CSV của bạn có hàng tiêu đề hay không - trong đó dòng đầu tiên không chứa dữ liệu - thay vào đó nó chứa tên cho mỗi cột. Nếu bạn có hàng tiêu đề, bạn nên sử dụng tùy chọn mongoimport8 để nói với mongoimport rằng dòng đầu tiên không nên được nhập làm tài liệu.mongoimport5 or mongoimport6 option to tell mongoimport what format to expect. Also important is to know whether your CSV file has a header row - where the first line doesn't contain data - instead it contains the name for each column. If you do have a header row, you should use the mongoimport8 option to tell mongoimport that the first line should not be imported as a document.

Với dữ liệu CSV, bạn có thể phải thực hiện thêm một số công việc để chú thích dữ liệu để khiến nó nhập chính xác. Các vấn đề chính là:

  • Dữ liệu CSV là "phẳng" - Không có cách nào tốt để nhúng các công cụ phụ vào một hàng của tệp CSV, vì vậy bạn có thể muốn tái cấu trúc dữ liệu để phù hợp với cấu trúc bạn muốn có trong các tài liệu MongoDB của mình.

  • Dữ liệu CSV không bao gồm thông tin loại.

Vấn đề đầu tiên là một vấn đề có lẽ lớn hơn. Bạn có hai tùy chọn. Một là viết một tập lệnh để tái cấu trúc dữ liệu trước khi sử dụng mongoimport để nhập dữ liệu. Một cách tiếp cận khác có thể là nhập dữ liệu vào MongoDB và sau đó chạy một đường ống tổng hợp để chuyển đổi dữ liệu thành cấu trúc cần thiết của bạn.before using mongoimport to import the data. Another approach could be to import the data into MongoDB and then run an aggregation pipeline to transform the data into your required structure.

Cả hai cách tiếp cận này đều nằm ngoài phạm vi của bài đăng trên blog này. Nếu đó là điều bạn muốn thấy nhiều lời giải thích hơn, hãy truy cập các diễn đàn cộng đồng MongoDB.MongoDB Community Forums.

Thực tế là các tệp CSV không chỉ định loại dữ liệu trong mỗi trường có thể được giải quyết bằng cách chỉ định các loại trường khi gọi mongoimport.mongoimport.

Chỉ định các loại trường

Nếu bạn không có hàng tiêu đề, thì bạn phải nói mongoimport tên của từng cột của bạn, để mongoimport biết nên gọi mỗi trường trong mỗi tài liệu sẽ được nhập gì. Có hai phương thức để thực hiện điều này: bạn có thể liệt kê các tên trường trên dòng lệnh với tùy chọn jq4 hoặc bạn có thể đặt tên trường vào một tệp và trỏ đến tùy chọn jq5.mongoimport the name of each of your columns, so that mongoimport knows what to call each of the fields in each of the documents to be imported. There are two methods to do this: You can list the field names on the command-line with the jq4 option, or you can put the field names in a file, and point to it with the jq5 option.

Đó là một hàng dài! Trong trường hợp có rất nhiều cột, bạn nên quản lý các tên trường trong một tệp trường.

Sử dụng tệp trường

Tệp trường là danh sách các tên cột, với một tên trên mỗi dòng. Vì vậy, tương đương với giá trị jq4 từ cuộc gọi ở trên trông như thế này:jq4 value from the call above looks like this:

Nếu bạn đặt nội dung đó vào một tệp có tên là 'field_file.txt' và sau đó chạy lệnh sau, nó sẽ sử dụng các tên cột này làm tên trường trong MongoDB:

Hướng dẫn how do i import a collection in mongodb? - làm cách nào để nhập một bộ sưu tập trong mongodb?
Các tài liệu nhập khẩu, được xem trong La bàn MongoDB. Lưu ý rằng các trường ngày đã được nhập dưới dạng chuỗi.

Nếu bạn mở la bàn và nhìn vào lược đồ cho một trong hai trường_option 'hoặc' fieldfile_option ', bạn sẽ thấy rằng mongoimport đã tự động chuyển đổi các loại số nguyên thành mongoimport1 và giữ các giá trị vĩ độ và kinh độ là jq9 con số. Tuy nhiên, trong một số trường hợp, MongoDB có thể đưa ra quyết định không chính xác. Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng các trường 'Starttime' và 'Stoptime' đã được nhập dưới dạng chuỗi. Lý tưởng nhất là chúng đã được nhập khẩu dưới dạng loại BSON, hiệu quả hơn để lưu trữ và lọc.mongoimport has automatically converted integer types to mongoimport1 and kept the latitude and longitude values as jq9 which is a real type, or floating-point number. In some cases, though, MongoDB may make an incorrect decision. In the screenshot above, you can see that the 'starttime' and 'stoptime' fields have been imported as strings. Ideally they would have been imported as a BSON date type, which is more efficient for storage and filtering.

Trong trường hợp này, bạn sẽ muốn chỉ định loại của một số hoặc tất cả các cột của bạn.

Chỉ định các loại cho các cột CSV

Để nói mongoimport Bạn muốn chỉ định loại của một số hoặc tất cả các trường của bạn, bạn nên sử dụng tùy chọn csvkit1. Cũng như sử dụng tùy chọn csvkit1, bạn sẽ cần chỉ định các loại trường của mình. Nếu bạn đang sử dụng tùy chọn jq4, bạn có thể thêm thông tin loại vào giá trị đó, nhưng tôi khuyên bạn nên thêm dữ liệu loại vào tệp trường. Bằng cách này, nó sẽ dễ đọc và duy trì hơn, và đó là những gì tôi sẽ chứng minh ở đây.mongoimport you wish to specify the type of some or all of your fields, you should use the csvkit1 option. As well as using the csvkit1 option, you will need to specify the types of your fields. If you're using the jq4 option, you can add type information to that value, but I highly recommend adding type data to the field file. This way it should be more readable and maintainable, and that's what I'll demonstrate here.

Tôi đã tạo một tệp có tên csvkit4 và nhập sau:csvkit4, and entered the following:

Bởi vì mongoimport đã làm đúng với hầu hết các trường, tôi đã đặt chúng thành csvkit6 - thông tin loại xuất hiện sau một khoảng thời gian (csvkit7). Hai trường thời gian, mongoimport5 và mongoimport6 đã được nhập không chính xác dưới dạng chuỗi, vì vậy trong những trường hợp này, tôi đã chỉ định rằng chúng nên được coi là loại curl0. Nhiều loại có đối số bên trong dấu ngoặc đơn. Trong trường hợp loại curl0, nó hy vọng đối số sẽ là một ngày được định dạng theo cùng một cách bạn mong đợi các giá trị của cột được định dạng. Xem tài liệu tham khảo để biết thêm chi tiết.mongoimport already did the right thing with most of the fields, I've set them to csvkit6 - the type information comes after a period (csvkit7). The two time fields, mongoimport5 and mongoimport6 were being incorrectly imported as strings, so in these cases I've specified that they should be treated as a curl0 type. Many of the types take arguments inside the parentheses. In the case of the curl0 type, it expects the argument to be a date formatted in the same way you expect the column's values to be formatted. See the reference documentation for more details.

Bây giờ, dữ liệu có thể được nhập với cuộc gọi sau đến mongoimport:mongoimport:

Và phần còn lại

Hy vọng bây giờ bạn có một ý tưởng tốt về cách sử dụng mongoimport và mức độ linh hoạt của nó! Tôi đã không bao gồm gần như tất cả các tùy chọn có thể được cung cấp cho mongoimport, tuy nhiên, chỉ là những tùy chọn quan trọng nhất. Những người khác mà tôi thấy hữu ích thường xuyên là:mongoimport and of how flexible it is! I haven't covered nearly all of the options that can be provided to mongoimport, however, just the most important ones. Others I find useful frequently are:

Quyền muaSự mô tả
curl5Bỏ qua các trường hoặc cột có giá trị trống.
curl6Thả bộ sưu tập trước khi nhập các tài liệu mới. Điều này đặc biệt hữu ích trong quá trình phát triển, nhưng sẽ mất dữ liệu nếu bạn vô tình sử dụng nó.will lose data if you use it accidentally.
curl7Một tùy chọn khác hữu ích trong quá trình phát triển, điều này khiến mongoimport dừng lại ngay khi xảy ra lỗi.mongoimport to stop immediately when an error occurs.

Một trong những lợi ích chính của các chương trình dòng lệnh là chúng được thiết kế để làm việc với các chương trình dòng lệnh khác để cung cấp nhiều quyền lực hơn. Có một vài chương trình dòng lệnh mà tôi đặc biệt khuyên bạn nên xem: jq một công cụ thao tác JSON và csvkit Một công cụ tương tự để làm việc với các tệp CSV.other command-line programs to provide more power. There are a couple of command-line programs that I particularly recommend you look at: jq a JSON manipulation tool, and csvkit a similar tool for working with CSV files.

Jq

JQ là bộ xử lý cho dữ liệu JSON. Nó kết hợp một ngôn ngữ lọc và kịch bản mạnh mẽ để lọc, thao tác và thậm chí tạo dữ liệu JSON. Một hướng dẫn đầy đủ về cách sử dụng JQ nằm ngoài phạm vi cho hướng dẫn này, nhưng để cung cấp cho bạn một bản tóm tắt ngắn gọn:

Nếu bạn tạo tập lệnh JQ được gọi là mongoimport1 chứa các mục sau:mongoimport1 containing the following:

Bây giờ bạn có thể gửi dữ liệu JSON mẫu thông qua tập lệnh này để sửa đổi các trường mongoimport5 và mongoimport6 để chúng được nhập vào MongoDB dưới dạng các loại mongoimport4:mongoimport5 and mongoimport6 fields so that they will be imported into MongoDB as mongoimport4 types:

Điều này có thể được sử dụng trong một đường ống nhiều giai đoạn, trong đó dữ liệu được đưa vào mongoimport qua jq.mongoimport via jq.

Công cụ jq có thể hơi khó hiểu lúc đầu, nhưng một khi bạn bắt đầu hiểu ngôn ngữ hoạt động như thế nào, nó rất mạnh mẽ và rất nhanh. Tôi đã cung cấp một ví dụ SCRIPT JQ phức tạp hơn trong repo data data data, được gọi là mongoimport8. Kiểm tra nó để biết thêm ý tưởng và tài liệu đầy đủ trên trang web JQ.jq tool can be a little fiddly to understand at first, but once you start to understand how the language works, it is very powerful, and very fast. I've provided a more complex JQ script example in the sample data GitHub repo, called mongoimport8. Check it out for more ideas, and the full documentation on the JQ website.

CSVKIT

Theo cùng một cách mà jq là một công cụ để lọc và điều khiển dữ liệu JSON, csvkit là một bộ sưu tập nhỏ các công cụ để lọc và thao tác dữ liệu CSV. Một số công cụ, trong khi hữu ích theo cách riêng của chúng, không có khả năng hữu ích khi kết hợp với mongoimport. Các công cụ như mongoimport02 lọc các hàng tệp CSV dựa trên các biểu thức và mongoimport03 có thể xóa toàn bộ cột khỏi đầu vào CSV, là các công cụ hữu ích để cắt và cắt dữ liệu của bạn trước khi cung cấp nó cho mongoimport.jq is a tool for filtering and manipulating JSON data, csvkit is a small collection of tools for filtering and manipulating CSV data. Some of the tools, while useful in their own right, are unlikely to be useful when combined with mongoimport. Tools like mongoimport02 which filters csv file rows based on expressions, and mongoimport03 which can remove whole columns from CSV input, are useful tools for slicing and dicing your data before providing it to mongoimport.

Kiểm tra các tài liệu CSVKIT để biết thêm thông tin về cách sử dụng bộ sưu tập công cụ này.csvkit docs for more information on how to use this collection of tools.

Có những công cụ khác mà bạn biết sẽ hoạt động tốt với mongoimport không? Bạn có một ví dụ tuyệt vời về việc sử dụng mongoimport06 để xử lý dữ liệu bảng trước khi nhập vào MongoDB không? Hãy cho chúng tôi biết trên các diễn đàn cộng đồng!mongoimport? Do you have a great example of using mongoimport06 to handle tabular data before importing into MongoDB? Let us know on the community forums!

Sự kết luận

Đó là một sai lầm phổ biến khi viết mã tùy chỉnh để nhập dữ liệu vào MongoDB. Tôi hy vọng tôi đã chứng minh mongoimport mạnh như thế nào là một công cụ để nhập dữ liệu vào MongoDB một cách nhanh chóng và hiệu quả. Kết hợp với các công cụ dòng lệnh đơn giản khác, đó là một cách nhanh chóng và linh hoạt để nhập dữ liệu của bạn vào MongoDB.mongoimport is as a tool for importing data into MongoDB quickly and efficiently. Combined with other simple command-line tools, it's both a fast and flexible way to import your data into MongoDB.

Làm cách nào để tôi xuất và nhập bộ sưu tập trong MongoDB?

Procedure..
Kết nối với triển khai có chứa bộ sưu tập bạn muốn nhập dữ liệu vào. ....
Điều hướng đến bộ sưu tập mục tiêu của bạn. ....
Nhấp vào Thêm thả xuống dữ liệu và chọn Nhập tệp. ....
Chọn vị trí của tệp dữ liệu nguồn trong tệp chọn ..
Chọn loại tệp thích hợp. ....
Định cấu hình các tùy chọn nhập. ....
Nhấp vào nhập ..

Làm cách nào để nhập một bộ sưu tập vào MongoDB Atlas?

Bạn có thể sử dụng MongoImport để nhập dữ liệu từ tệp JSON hoặc tệp CSV vào cụm MongoDB Atlas ...
Trong phần bảo mật của điều hướng bên trái, nhấp vào truy cập cơ sở dữ liệu. Tab người dùng cơ sở dữ liệu hiển thị ..
Nhấp vào Thêm người dùng cơ sở dữ liệu mới ..
Thêm người dùng Atlas Admin ..

Làm cách nào để nhập một lược đồ vào MongoDB?

Bạn có thể xuất lược đồ của mình sau khi phân tích nó ...
Sao chép các tài liệu JSON ở trên ..
Trong Compass MongoDB, chọn một bộ sưu tập hoặc tạo một bộ sưu tập mới để nhập các tài liệu được sao chép vào.....
Nhấp vào Thêm dữ liệu ..
Chọn Chèn tài liệu từ thả xuống ..

Làm cách nào để nhập tệp CSV vào MongoDB?

Bạn có thể sử dụng lệnh Mongoimport để nhập các tệp CSV vào một bộ sưu tập bằng tùy chọn Headerline.Tùy chọn tiêu đề thông báo cho lệnh Mongoimport của dòng đầu tiên;không được nhập dưới dạng tài liệu vì nó chứa tên trường thay vì dữ liệu.