sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man slår ihop dokument när man importerar en fil till MongoDB

När du använder mongoimport för att importera filer till MongoDB har du möjlighet att slå samman befintliga dokument med de som du importerar.

I det här fallet, om ett importerat dokument har samma _id värde som ett befintligt i samlingen som du importerar till, kommer det befintliga dokumentet att slås samman med det som importeras.

Du kan också ange ett annat fält (annat än _id). fält) för att vara det matchande fältet vid behov.

När du slår samman dokument kommer det resulterande dokumentet att kombinera befintliga data med alla nya data som finns i den importerade filen. All data som är densamma förblir densamma. Alla motstridiga data kommer att resultera i att den importerade filens data skriver över befintliga data. Om ett importerat dokument inte innehåller ett fält som finns i motsvarande dokument i MongoDB-samlingen, kommer det fältet att förbli oförändrat i samlingen (dvs. det kommer inte att tas bort eller ändras).

Sättet att slå samman dokument med mongoimport är att använda merge läge.

Exempel

Anta att vi har en samling som heter pets som innehåller följande dokument:

db.pets.find()

Resultat:

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

Och vi har följande JSON-fil som heter 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}

Följande kommando importerar JSON-filen till samlingen:

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

Detta använder merge läge för att slå samman matchande dokument med de importerade.

Kontrollera resultaten

Låt oss ta en titt på kollektionen nu.

db.pets.find()

Resultat:

{ "_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 }

Vi kan se att dokument 1 är oförändrat, dokument 2 har fått sitt namnfält ändrat till Fetch , och den har också haft en weight fält tillagt.. Dokument 3 har också fått ett viktfält tillagt, och dokument 4 har infogats.

Ändra Upsert Field/s

Du kan använda --upsertFields parameter för att ange ett annat fält än _id att matcha mot. När du använder den här parametern skickar du fälten som en kommaseparerad lista.

Anta att vi har en annan JSON-fil som heter pets2.json som vi vill importera, och det ser ut så här:

{"name":"Wag","type":"Dog","weight":20.0,"gooddog":true}
{"name":"Bubbles","type":"Fish"}

Det här dokumentet innehåller inte _id fält, så vi skulle behöva matcha mot andra fält som unikt identifierar varje dokument. I det här fallet kan vi använda name och type fält.

Vi kan därför använda följande mongoimport kommando:

mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json

Låt oss nu kontrollera samlingen igen:

db.pets.find()

Resultat:

{ "_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" }

Vi kan se att Wag har uppdaterats (men _id värdet förblir detsamma).

Bubbles å andra sidan hade ingen match för upsertfälten och infogades därför.

Kontrollera efter mongoimport

mongoimport är en del av MongoDB Database Tools-paketet. MongoDB Database Tools är en uppsättning kommandoradsverktyg för att arbeta med MongoDB.

Om du inte är säker på om du har MongoDB Database Tools/mongoimport installerat, prova att köra följande kommando i din terminal eller kommandotolk för att kontrollera:

mongoimport --version

Om du har det bör du se versionsinformation etc. Om du inte har det kan du använda installationsinstruktionerna på MongoDB-webbplatsen för att installera det på ditt system.

Var kör man kommandona?

Glöm inte att du måste köra mongoimport kommandon från ditt systems kommandorad (t.ex. ett nytt terminal- eller kommandotolkfönster).

Kör dem inte från mongo skal.


  1. Hur man ställer in Yii2 med Redis-konfiguration

  2. Ansluta Hydra-CLI till en lösenordsskyddad redis-server?

  3. varför Redis är enkelgängad (händelsedriven)

  4. $strLenBytes vs $strLenCP i MongoDB:Vad är skillnaden?