MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Các chế độ nhập của mongoimport

Khi sử dụng mongoimport để nhập tệp vào MongoDB, bạn có tùy chọn chỉ định chế độ để sử dụng. Các chế độ này xác định điều gì sẽ xảy ra nếu đã có tài liệu khớp trong bộ sưu tập mà bạn đang cố gắng nhập vào.

Theo mặc định, mongoimport sử dụng insert nhưng có những chế độ khác mà bạn có thể sử dụng. Chế độ bạn sử dụng sẽ phụ thuộc vào những gì bạn đang cố gắng thực hiện.

Dưới đây là tổng quan về từng chế độ cùng với các ví dụ.

Các chế độ

Các chế độ nhập có sẵn trong mongoimport như sau:

Chế độ Mô tả
insert Đây là chế độ mặc định. Chế độ này sẽ chèn các tài liệu từ tệp nhập. Nếu một tài liệu phù hợp đã tồn tại trong bộ sưu tập, thì sẽ xảy ra lỗi. Tài liệu phù hợp là tài liệu có cùng một ID duy nhất (chẳng hạn như _id phù hợp trường) dưới dạng tài liệu trong tệp nhập.
upsert Thay thế các tài liệu hiện có trong cơ sở dữ liệu bằng các tài liệu phù hợp từ tệp nhập. Tất cả các tài liệu khác đã được chèn.
merge Hợp nhất tài liệu hiện có khớp với tài liệu trong tệp nhập với tài liệu mới. Tất cả các tài liệu khác đã được chèn.
delete Xóa tài liệu hiện có trong cơ sở dữ liệu khớp với tài liệu trong tệp nhập. Mọi tài liệu không khớp đều không có hiệu lực.

Dưới đây là ví dụ về cách hoạt động của từng chế độ.

Chế độ Chèn

Giả sử chúng ta có một bộ sưu tập có tên là pets với các tài liệu sau:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Hóa ra, chúng đã được nhập vào một tệp có tên là pets.json .

Bây giờ, hãy tưởng tượng chúng ta có một tệp JSON khác được gọi là pets2.json , chứa các tài liệu JSON sau:

{ "_id" : 1, "weight": 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 }

Đây là những gì sẽ xảy ra nếu chúng tôi cố gắng nhập dữ liệu đó vào pets của mình bộ sưu tập trong khi sử dụng (mặc định) insert chế độ.

mongoimport --db=PetHotel --collection=pets --file=pets2.json

Đầu ra:

2021-01-03T10:07:23.421+1000	connected to: mongodb://localhost/
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 1 }
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 2 }
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 3 }
2021-01-03T10:07:23.423+1000	1 document(s) imported successfully. 3 document(s) failed to import.

Theo thông báo lỗi đó, chỉ một trong bốn tài liệu được nhập. Ba khóa còn lại gây ra lỗi do có một khóa trùng lặp trong _id trường.

Bây giờ chúng ta hãy xem xét bộ sưu tập.

db.pets.find()

Kết quả:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }

Vì vậy, chúng ta có thể thấy rằng tài liệu cuối cùng đã được chèn. Điều này được mong đợi, vì trước đây chúng tôi không có tài liệu nào có _id giá trị của 4 .

Chế độ nâng cấp

Đây là những gì sẽ xảy ra nếu chúng tôi sử dụng upsert để chèn cùng một tài liệu.

mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json

Đầu ra:

2021-01-03T10:19:55.400+1000	connected to: mongodb://localhost/
2021-01-03T10:19:55.444+1000	3 document(s) imported successfully. 0 document(s) failed to import.

Kết quả cho chúng ta biết rằng 3 trong số 4 tài liệu đã được nhập thành công và không có lỗi nào.

Hãy kiểm tra bộ sưu tập.

db.pets.find()

Kết quả:

{ "_id" : 1, "weight": 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 }

Chúng ta có thể thấy rằng ba tài liệu đầu tiên đã được thay thế bằng các tài liệu từ tệp nhập. Tài liệu thứ tư vẫn giữ nguyên như sau lần nhập trước.

Lưu ý rằng tài liệu đầu tiên đã bị mất nametype lĩnh vực. Điều này là do upsert chế độ thay thế toàn bộ tài liệu và tài liệu thay thế của chúng tôi chỉ có weight trường (cũng như _id đồng ruộng).

Chế độ hợp nhất

Hãy sửa đổi pets2.json của chúng tôi tệp sao cho nó trông giống như sau:

{ "_id" : 1, "name": "Wag", "type": "Dog" }
{ "_id" : 2, "name" : "Fetch" }
{ "_id" : 3, "name" : "Scratch" }
{ "_id" : 4, "name" : "Bubbles" }
{ "_id" : 5, "name" : "Hop", "type": "Kangaroo" }

Bây giờ chúng ta hãy chạy mongoimport lệnh một lần nữa, nhưng lần này trong merge chế độ:

mongoimport --db=PetHotel --collection=pets --mode=merge --file=pets2.json

Đầu ra:

2021-01-03T10:32:33.596+1000	connected to: mongodb://localhost/
2021-01-03T10:32:33.607+1000	3 document(s) imported successfully. 0 document(s) failed to import.

Theo kết quả đầu ra, 3 tài liệu đã được nhập khẩu.

Hãy xem bộ sưu tập.

db.pets.find()

Kết quả:

{ "_id" : 1, "weight" : 40, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
{ "_id" : 5, "name" : "Hop", "type" : "Kangaroo" }

Chúng ta có thể thấy rằng tài liệu 1 và 2 đã được cập nhật, và tài liệu 5 đã được chèn vào. Về tài liệu 1, weight trường vẫn còn mặc dù tài liệu nhập không bao gồm trường đó. Điều này là do chúng tôi đã sử dụng merge cách thức. Nếu chúng tôi đã sử dụng upsert (như trong ví dụ trước), weight trường sẽ biến mất.

Chế độ xóa

Khi bạn sử dụng delete chế độ, mọi tài liệu phù hợp sẽ bị xóa đơn giản. Các tài liệu không khớp vẫn còn trong bộ sưu tập.

Vì vậy, hãy xem điều gì sẽ xảy ra khi chúng tôi nhập cùng một tài liệu, nhưng lần này chuyển sang delete chế độ.

mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json

Kết quả:

2021-01-03T10:39:38.925+1000	connected to: mongodb://localhost/
2021-01-03T10:39:38.926+1000	5 document(s) deleted successfully. 0 document(s) failed to delete.

Tất cả 5 tài liệu trong bộ sưu tập đã bị xóa.

Thay đổi / s Trường nâng cấp

Bạn có thể sử dụng --upsertFields tham số để chỉ định một trường không phải là _id để so khớp với. Khi sử dụng tham số này, hãy chuyển các trường dưới dạng danh sách được phân tách bằng dấu phẩy.

Không chắc nếu bạn có mongoimport ?

mongoimport là một phần của gói Công cụ cơ sở dữ liệu MongoDB. Công cụ cơ sở dữ liệu MongoDB là một bộ tiện ích dòng lệnh để làm việc với MongoDB.

Nếu bạn không chắc mình có Công cụ cơ sở dữ liệu MongoDB / mongoimport hay không đã cài đặt, hãy thử chạy lệnh sau trong Terminal hoặc Command Prompt của bạn để kiểm tra:

mongoimport --version

Nếu có, bạn sẽ thấy thông tin phiên bản, v.v. Nếu chưa có, bạn có thể sử dụng hướng dẫn cài đặt trên trang web MongoDB để cài đặt vào hệ thống của mình.

Chạy ở đâu mongoimport Lệnh?

Bạn cần chạy mongoimport lệnh từ dòng lệnh của hệ thống của bạn (ví dụ:cửa sổ Terminal hoặc Command Prompt mới).

Đừng chạy chúng từ mongo vỏ bọc.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. SCUMM:Cơ sở hạ tầng giám sát cơ sở dữ liệu dựa trên tác nhân trong ClusterControl

  2. Cách cải thiện hiệu suất chèn MongoDB

  3. Loại bỏ các bản sao khi sử dụng $ unionWith trong MongoDB

  4. Tài liệu được nhúng không có Mảng?

  5. Mongocli có hỗ trợ URL công thức cho chip Apple M1 không?