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

Die Importmodi von mongoimport

Bei Verwendung von mongoimport Um Dateien in MongoDB zu importieren, haben Sie die Möglichkeit, einen zu verwendenden Modus anzugeben. Diese Modi bestimmen, was passiert, wenn es bereits übereinstimmende Dokumente in der Sammlung gibt, in die Sie zu importieren versuchen.

Standardmäßig mongoimport verwendet insert Modus, aber es gibt noch andere Modi, die Sie verwenden können. Welchen Modus Sie verwenden, hängt davon ab, was Sie tun möchten.

Nachfolgend finden Sie eine Übersicht über jeden Modus zusammen mit Beispielen.

Die Modi

Die in mongoimport verfügbaren Importmodi lauten wie folgt:

Modus Beschreibung
insert Dies ist der Standardmodus. Dieser Modus fügt die Dokumente aus der Importdatei ein. Wenn bereits ein übereinstimmendes Dokument in der Sammlung vorhanden ist, tritt ein Fehler auf. Ein übereinstimmendes Dokument ist eines, das dieselbe eindeutige ID hat (z. B. eine übereinstimmende _id Feld) als Dokument in der Importdatei.
upsert Ersetzt vorhandene Dokumente in der Datenbank durch passende Dokumente aus der Importdatei. Alle anderen Dokumente werden eingefügt.
merge Führt vorhandene Dokumente, die mit einem Dokument in der Importdatei übereinstimmen, mit dem neuen Dokument zusammen. Alle anderen Dokumente werden eingefügt.
delete Löscht vorhandene Dokumente in der Datenbank, die mit einem Dokument in der Importdatei übereinstimmen. Alle nicht übereinstimmenden Dokumente haben keine Auswirkung.

Beispiele für die Funktionsweise der einzelnen Modi finden Sie unten.

Einfügemodus

Angenommen, wir haben eine Sammlung namens pets mit folgenden Dokumenten:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Wie sich herausstellt, wurden diese in eine Datei namens pets.json importiert .

Stellen Sie sich nun vor, wir hätten eine weitere JSON-Datei namens pets2.json , das die folgenden JSON-Dokumente enthält:

{ "_id" : 1, "weight": 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 }

Folgendes passiert, wenn wir versuchen, das in unsere pets zu importieren Sammlung, während (Standardeinstellung) insert verwendet wird Modus.

mongoimport --db=PetHotel --collection=pets --file=pets2.json

Ausgabe:

2021-01-03T10:07:23.421+1000	connected to: mongodb://localhost/
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 1 }
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 2 }
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 3 }
2021-01-03T10:07:23.423+1000	1 document(s) imported successfully. 3 document(s) failed to import.

Laut dieser Fehlermeldung wurde nur eines der vier Dokumente importiert. Die anderen drei verursachten einen Fehler, weil sie einen doppelten Schlüssel in der _id hatten Feld.

Sehen wir uns nun die Sammlung an.

db.pets.find()

Ergebnis:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }

So können wir sehen, dass das letzte Dokument eingefügt wurde. Dies ist zu erwarten, da wir zuvor kein Dokument mit einer _id hatten Wert von 4 .

Upsert-Modus

Folgendes passiert, wenn wir upsert verwenden Modus, um dasselbe Dokument einzufügen.

mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json

Ausgabe:

2021-01-03T10:19:55.400+1000	connected to: mongodb://localhost/
2021-01-03T10:19:55.444+1000	3 document(s) imported successfully. 0 document(s) failed to import.

Die Ausgabe sagt uns, dass 3 der 4 Dokumente erfolgreich importiert wurden und dass es keine Fehler gab.

Sehen wir uns die Sammlung an.

db.pets.find()

Ergebnis:

{ "_id" : 1, "weight" : 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }

Wir können sehen, dass die ersten drei Dokumente durch die Dokumente aus der Importdatei ersetzt wurden. Das vierte Dokument bleibt unverändert wie nach dem vorherigen Import.

Beachten Sie, dass das erste Dokument seinen name verloren hat und type Felder. Das liegt daran, dass upsert Modus ersetzt das gesamte Dokument, und unser Ersatzdokument hat nur das weight Feld (sowie die _id Feld).

Zusammenführungsmodus

Lassen Sie uns unsere pets2.json ändern Datei so, dass es so aussieht:

{ "_id" : 1, "name": "Wag", "type": "Dog" }
{ "_id" : 2, "name" : "Fetch" }
{ "_id" : 3, "name" : "Scratch" }
{ "_id" : 4, "name" : "Bubbles" }
{ "_id" : 5, "name" : "Hop", "type": "Kangaroo" }

Lassen Sie uns nun den mongoimport ausführen Befehl erneut, aber diesmal in merge Modus:

mongoimport --db=PetHotel --collection=pets --mode=merge --file=pets2.json

Ausgabe:

2021-01-03T10:32:33.596+1000	connected to: mongodb://localhost/
2021-01-03T10:32:33.607+1000	3 document(s) imported successfully. 0 document(s) failed to import.

Laut Ausgabe wurden 3 Dokumente importiert.

Werfen wir einen Blick auf die Sammlung.

db.pets.find()

Ergebnis:

{ "_id" : 1, "weight" : 40, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
{ "_id" : 5, "name" : "Hop", "type" : "Kangaroo" }

Wir können sehen, dass die Dokumente 1 und 2 aktualisiert wurden und Dokument 5 eingefügt wurde. Bezüglich Dokument 1, das weight Feld blieb bestehen, obwohl das Importdokument dieses Feld nicht enthielt. Das liegt daran, dass wir merge verwendet haben Modus. Wenn wir upsert verwendet hätten mode (wie im vorigen Beispiel), das weight wäre verschwunden.

Löschmodus

Wenn Sie delete verwenden Modus werden alle übereinstimmenden Dokumente einfach gelöscht. Nicht übereinstimmende Dokumente verbleiben in der Sammlung.

Sehen wir uns also an, was passiert, wenn wir dasselbe Dokument importieren, diesmal aber auf delete umschalten Modus.

mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json

Ergebnis:

2021-01-03T10:39:38.925+1000	connected to: mongodb://localhost/
2021-01-03T10:39:38.926+1000	5 document(s) deleted successfully. 0 document(s) failed to delete.

Alle 5 Dokumente in der Sammlung wurden gelöscht.

Ändern der Upsert-Felder

Sie können die --upsertFields verwenden -Parameter, um ein anderes Feld als _id anzugeben gegen zu passen. Wenn Sie diesen Parameter verwenden, übergeben Sie die Felder als kommagetrennte Liste.

Nicht sicher, ob Sie mongoimport haben ?

mongoimport ist Teil des MongoDB Database Tools-Pakets. Die MongoDB-Datenbanktools sind eine Reihe von Befehlszeilendienstprogrammen für die Arbeit mit MongoDB.

Wenn Sie sich nicht sicher sind, ob Sie die MongoDB Database Tools/mongoimport installiert haben, versuchen Sie, den folgenden Befehl in Ihrem Terminal oder Ihrer Eingabeaufforderung auszuführen, um dies zu überprüfen:

mongoimport --version

Wenn Sie es haben, sollten Sie Versionsinformationen usw. sehen. Wenn Sie es nicht haben, können Sie die Installationsanweisungen auf der MongoDB-Website verwenden, um es auf Ihrem System zu installieren.

Wo soll mongoimport ausgeführt werden Befehle?

Sie müssen mongoimport ausführen Befehle über die Befehlszeile Ihres Systems (z. B. ein neues Terminal- oder Eingabeaufforderungsfenster).

Führen Sie sie nicht vom mongo aus Hülse.