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

So führen Sie Dokumente beim Importieren einer Datei in MongoDB zusammen

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.