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

So ersetzen Sie vorhandene Dokumente beim Importieren einer Datei in MongoDB

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.