Khi bạn sử dụng mongoimport
để nhập tệp vào MongoDB, bạn có tùy chọn thay thế tài liệu hiện có khớp với tài liệu bạn đang nhập.
Ý tôi là, nếu một tài liệu đã nhập có cùng _id
giá trị như một tài liệu hiện có trong bộ sưu tập mà bạn đang nhập vào, tài liệu hiện có sẽ được thay thế bằng tài liệu đang được nhập.
Bạn cũng có thể chỉ định một trường khác (ngoài _id
trường) là trường phù hợp nếu được yêu cầu.
Cách thay thế các tài liệu hiện có khi sử dụng mongoimport
là sử dụng upsert
chế độ.
Ví dụ
Giả sử chúng ta có một bộ sưu tập có tên là pets
chứa các tài liệu sau:
db.pets.find()
Kết quả:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
Và chúng tôi có tệp JSON sau được gọi là pets.json
:
{"_id":2,"name":"Fetch","type":"Dog"} {"_id":3,"name":"Scratch","type":"Cat","weight":10} {"_id":4,"name":"Hop","type":"Kangaroo","weight":60}
Lệnh sau nhập tệp JSON vào bộ sưu tập:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Điều này sử dụng upsert
chế độ thay thế các tài liệu phù hợp bằng các tài liệu đã nhập.
Kiểm tra kết quả
Bây giờ chúng ta hãy xem bộ sưu tập.
db.pets.find()
Kết quả:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog" } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Chúng ta có thể thấy rằng tài liệu 2 đã được thay thế hoàn toàn. Con chó Bark
đã được thay thế bằng con chó Fetch
và không có trọng lượng nào được ghi lại cho Fetch
.
Tài liệu 3 cũng đã được thay thế và tài liệu 4 là một tài liệu hoàn toàn mới.
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.
Giả sử chúng ta có một tệp JSON khác được gọi là pets2.json
mà chúng tôi muốn nhập và nó trông giống như sau:
{"name":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"name":"Bubbles","type":"Fish"}
Tài liệu này không bao gồm _id
, vì vậy chúng tôi sẽ cần đối sánh với các trường khác nhận dạng duy nhất từng tài liệu. Trong trường hợp này, chúng tôi có thể sử dụng name
và type
lĩnh vực.
Do đó, chúng tôi có thể sử dụng mongoimport
sau lệnh:
mongoimport --db=PetHotel --collection=pets --mode=upsert --upsertFields=name,type --file=data/pets2.json
Bây giờ chúng ta hãy kiểm tra lại bộ sưu tập:
db.pets.find()
Kết quả:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }
Chúng tôi có thể thấy rằng Tìm nạp đã được cập nhật / thay thế (nhưng _id
giá trị không đổi). Với Scratch cũng vậy.
Mặt khác, bong bóng không phù hợp với các trường nâng cấp và do đó đã được chèn vào.
Kiểm tra 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 lệnh ở đâu?
Đừng quên, 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.