Hành vi mặc định của mongoimport không được ghi đè lên các tài liệu hiện có:Trong JS shell, tôi đã tạo một tài liệu trong bộ sưu tập "chứng thực"
> db.testimport.save({_id:1, x:"a"})
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
>
Đây là nội dung của tệp import.json. Nó chứa 2 tài liệu, một tài liệu có _id duy nhất và một tài liệu có _id trùng lặp.
import.json
{_id:1, x:"b"}
{_id:2, x:"b"}
Trong một cửa sổ đầu cuối mới, mongoimport được chạy:
$ ./mongoimport -d test -c testimport import.json -vvvvv
Wed Apr 4 19:03:48 creating new connection to:127.0.0.1
Wed Apr 4 19:03:48 BackgroundJob starting: ConnectBG
Wed Apr 4 19:03:48 connected connection!
connected to: 127.0.0.1
Wed Apr 4 19:03:48 ns: test.testimport
Wed Apr 4 19:03:48 filesize: 29
Wed Apr 4 19:03:48 got line:{_id:1, x:"b"}
Wed Apr 4 19:03:48 got line:{_id:2, x:"b"}
imported 2 objects
$
Mặc dù đầu ra của mongoimport nói rằng hai đối tượng đã được nhập, tài liệu có _id:1 vẫn chưa bị ghi đè.
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "b" }
>
Nếu cờ --upsert được sử dụng, thì tài liệu có _id:1 sẽ được cập nhật:
$ ./mongoimport -d test -c testimport import.json -vvvvv --upsert
Wed Apr 4 19:14:26 creating new connection to:127.0.0.1
Wed Apr 4 19:14:26 BackgroundJob starting: ConnectBG
Wed Apr 4 19:14:26 connected connection!
connected to: 127.0.0.1
Wed Apr 4 19:14:26 ns: test.testimport
Wed Apr 4 19:14:26 filesize: 29
Wed Apr 4 19:14:26 got line:{_id:1, x:"b"}
Wed Apr 4 19:14:26 got line:{_id:2, x:"b"}
imported 2 objects
$
Trong JS shell, chúng ta có thể thấy rằng tài liệu có _id:1 đã được cập nhật:
> db.testimport.find()
{ "_id" : 1, "x" : "b" }
{ "_id" : 2, "x" : "b" }
>
Đây không phải là hành vi mà bạn đang gặp phải? Ở trên đã được thử nghiệm với phiên bản 2.1.1-pre, nhưng tôi không tin rằng mã mongoimport đã thay đổi trong một thời gian.