MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie importiere ich nur nicht vorhandene Dokumente?

Das Standardverhalten von mongoimport sollte nicht darin bestehen, vorhandene Dokumente zu überschreiben:In der JS-Shell habe ich ein Dokument in der Sammlung „testimport“ erstellt

> db.testimport.save({_id:1, x:"a"})
> db.testimport.find()
{ "_id" : 1, "x" : "a" }
> 

Hier sind die Inhalte der Datei import.json. Es enthält 2 Dokumente, eines mit einer eindeutigen _id und eines mit einer doppelten _id.

import.json
{_id:1, x:"b"}
{_id:2, x:"b"}

In einem neuen Terminalfenster wird mongoimport ausgeführt:

$ ./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
$

Obwohl die Ausgabe von mongoimport besagt, dass zwei Objekte importiert wurden, wurde das Dokument mit _id:1 nicht überschrieben.

> db.testimport.find()
{ "_id" : 1, "x" : "a" }
{ "_id" : 2, "x" : "b" }
>

Wenn das Flag --upsert verwendet wird, wird das Dokument mit _id:1 aktualisiert:

$ ./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 der JS-Shell können wir sehen, dass das Dokument mit _id:1 aktualisiert wurde:

> db.testimport.find()
{ "_id" : 1, "x" : "b" }
{ "_id" : 2, "x" : "b" }
>

Ist das nicht das Verhalten, das Sie erleben? Das obige wurde mit Version 2.1.1-pre getestet, aber ich glaube nicht, dass sich der mongoimport-Code seit einiger Zeit geändert hat.