Perilaku default mongoimport tidak boleh menimpa dokumen yang ada:Di shell JS, saya membuat dokumen di koleksi "testimport"
> db.testimport.save({_id:1, x:"a"})
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
>
Berikut adalah isi dari file import.json. Ini berisi 2 dokumen, satu dengan _id unik, dan satu lagi dengan _id duplikat.
import.json
{_id:1, x:"b"}
{_id:2, x:"b"}
Di jendela terminal baru, mongoimport dijalankan:
$ ./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
$
Meskipun output mongoimport mengatakan bahwa dua objek telah diimpor, dokumen dengan _id:1 belum ditimpa.
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "b" }
>
Jika flag --upsert digunakan, maka dokumen dengan _id:1 akan diperbarui:
$ ./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
$
Di shell JS, kita dapat melihat bahwa dokumen dengan _id:1 telah diperbarui:
> db.testimport.find()
{ "_id" : 1, "x" : "b" }
{ "_id" : 2, "x" : "b" }
>
Bukankah ini perilaku yang Anda alami? Di atas diuji dengan versi 2.1.1-pre, tetapi saya tidak percaya bahwa kode mongoimport telah berubah untuk sementara waktu.