Výchozí chování mongoimportu by nemělo spočívat v přepisování existujících dokumentů:V prostředí JS jsem vytvořil dokument v kolekci "testimport"
> db.testimport.save({_id:1, x:"a"})
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
>
Zde je obsah souboru import.json. Obsahuje 2 dokumenty, jeden s jedinečným _id a jeden s duplicitním _id.
import.json
{_id:1, x:"b"}
{_id:2, x:"b"}
V novém okně terminálu se spustí mongoimport:
$ ./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
$
I když výstup mongoimport říká, že byly importovány dva objekty, dokument s _id:1 nebyl přepsán.
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "b" }
>
Pokud je použit příznak --upsert, pak bude dokument s _id:1 aktualizován:
$ ./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
$
V prostředí JS vidíme, že dokument s _id:1 byl aktualizován:
> db.testimport.find()
{ "_id" : 1, "x" : "b" }
{ "_id" : 2, "x" : "b" }
>
Není toto chování, které zažíváte? Výše uvedené bylo testováno s verzí 2.1.1-pre, ale nevěřím, že se kód mongoimport na chvíli změnil.