Het standaardgedrag van mongoimport zou niet moeten zijn om bestaande documenten te overschrijven:in de JS-shell heb ik een document gemaakt in de verzameling "testimport"
> db.testimport.save({_id:1, x:"a"})
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
>
Hier is de inhoud van het bestand import.json. Het bevat 2 documenten, een met een unieke _id en een met een dubbele _id.
import.json
{_id:1, x:"b"}
{_id:2, x:"b"}
In een nieuw terminalvenster wordt mongoimport uitgevoerd:
$ ./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
$
Hoewel de uitvoer van mongoimport zegt dat er twee objecten zijn geïmporteerd, is het document met _id:1 niet overschreven.
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "b" }
>
Als de vlag --upsert wordt gebruikt, wordt het document met _id:1 bijgewerkt:
$ ./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
$
In de JS-shell kunnen we zien dat het document met _id:1 is bijgewerkt:
> db.testimport.find()
{ "_id" : 1, "x" : "b" }
{ "_id" : 2, "x" : "b" }
>
Is dit niet het gedrag dat je ervaart? Het bovenstaande is getest met versie 2.1.1-pre, maar ik geloof niet dat de mongoimport-code al een tijdje is gewijzigd.