Wenn Sie mongoimport
verwenden Um Dateien in MongoDB zu importieren, haben Sie die Möglichkeit, vorhandene Dokumente zu ersetzen, die mit denen übereinstimmen, die Sie importieren.
Damit meine ich, wenn ein importiertes Dokument dieselbe _id
hat Wert als vorhandenes Dokument in der Sammlung, in die Sie importieren, zu ändern, wird das vorhandene Dokument durch das zu importierende Dokument ersetzt.
Sie können auch ein anderes Feld angeben (außer _id
Feld) als übereinstimmendes Feld, falls erforderlich.
Die Möglichkeit, vorhandene Dokumente zu ersetzen, wenn mongoimport
verwendet wird ist upsert
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", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
Und wir haben die folgende JSON-Datei namens pets.json
:
{"_id":2,"name":"Fetch","type":"Dog"} {"_id":3,"name":"Scratch","type":"Cat","weight":10} {"_id":4,"name":"Hop","type":"Kangaroo","weight":60}
Der folgende Befehl importiert die JSON-Datei in die Sammlung:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Dies verwendet upsert
Modus, um übereinstimmende Dokumente durch die importierten zu ersetzen.
Überprüfen Sie die Ergebnisse
Werfen wir jetzt einen Blick auf die Sammlung.
db.pets.find()
Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog" } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Wir können sehen, dass Dokument 2 vollständig ersetzt wurde. Der Hund Bark
wurde durch den Hund Fetch
ersetzt , und für Fetch
wird kein Gewicht aufgezeichnet .
Dokument 3 wurde ebenfalls ersetzt und Dokument 4 ist ein komplett neues Dokument.
Ändern Sie die Upsert-Felder
Sie können die --upsertFields
verwenden -Parameter, um ein anderes Feld als _id
anzugeben für die zu vergleichen. 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":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"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=upsert --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", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }
Wir können sehen, dass Fetch aktualisiert/ersetzt wurde (aber die _id
Wert bleibt gleich). Dasselbe gilt für Scratch.
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.