Wenn Sie mongoimport
verwenden Um Dateien in MongoDB zu importieren, haben Sie die Möglichkeit, vorhandene Dokumente mit den zu importierenden zusammenzuführen.
In diesem Fall, wenn ein importiertes Dokument dieselbe _id
hat Wert als vorhandenes Dokument in der Sammlung, in die Sie importieren, zu markieren, wird das vorhandene Dokument mit dem importierten Dokument zusammengeführt.
Sie können auch ein anderes Feld angeben (außer _id
Feld) als übereinstimmendes Feld, falls erforderlich.
Wenn Sie Dokumente zusammenführen, kombiniert das resultierende Dokument vorhandene Daten mit allen neuen Daten, die in der importierten Datei enthalten sind. Alle Daten, die gleich sind, bleiben gleich. Widersprüchliche Daten führen dazu, dass die Daten der importierten Datei die vorhandenen Daten überschreiben. Wenn ein importiertes Dokument kein Feld enthält, das sich im entsprechenden Dokument in der MongoDB-Sammlung befindet, bleibt dieses Feld in der Sammlung unverändert (d. h. es wird nicht entfernt oder geändert).
Der Weg zum Zusammenführen von Dokumenten mit mongoimport
ist merge
zu verwenden Modus.
Beispiel
Angenommen, wir haben eine Sammlung namens pets
die folgende Dokumente enthalten:
db.pets.find()
Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Und wir haben die folgende JSON-Datei namens pets.json
:
{"_id":2.0,"name":"Fetch","type":"Dog","weight":40.0} {"_id":3.0,"weight":10.0} {"_id":4.0,"name":"Hop","type":"Kangaroo","weight":60.0}
Der folgende Befehl importiert die JSON-Datei in die Sammlung:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json
Dies verwendet merge
Modus, um übereinstimmende Dokumente mit den importierten zusammenzuführen.
Überprüfen Sie die Ergebnisse
Werfen wir jetzt einen Blick auf die Sammlung.
db.pets.find()
Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Wir können sehen, dass Dokument 1 unverändert ist, das Namensfeld von Dokument 2 wurde in Fetch
geändert , und es hatte auch ein weight
Feld hinzugefügt.. Dokument 3 wurde auch ein Gewichtungsfeld hinzugefügt, und Dokument 4 wurde eingefügt.
Ändern Sie die 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.
Angenommen, wir haben eine weitere JSON-Datei namens pets2.json
die wir importieren wollen, und sieht so aus:
{"name":"Wag","type":"Dog","weight":20.0,"gooddog":true} {"name":"Bubbles","type":"Fish"}
Dieses Dokument enthält nicht die _id
Feld, also müssten wir es mit anderen Feldern abgleichen, die jedes Dokument eindeutig identifizieren. In diesem Fall könnten wir den name
verwenden und type
Felder.
Wir können daher den folgenden mongoimport
verwenden Befehl:
mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json
Lassen Sie uns nun die Sammlung erneut überprüfen:
db.pets.find()
Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "gooddog" : true, "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff0548dd991410169412300"), "name" : "Bubbles", "type" : "Fish" }
Wir können sehen, dass Wag aktualisiert wurde (aber die _id
Wert bleibt gleich).
Bubbles hingegen hatte keine Übereinstimmung mit den Upsert-Feldern und wurde daher eingefügt.
Suchen Sie nach mongoimport
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 sollen die Befehle ausgeführt werden?
Vergessen Sie nicht, dass Sie mongoimport
ausführen müssen Befehle über die Befehlszeile Ihres Systems (z. B. ein neues Terminal- oder Eingabeaufforderungsfenster).
Führen Sie sie nicht vom mongo
aus Hülse.