sql >> Database >  >> NoSQL >> MongoDB

De importmodi van mongoimport

Bij gebruik van mongoimport om bestanden in MongoDB te importeren, hebt u de mogelijkheid om een ​​modus op te geven die u wilt gebruiken. Deze modi bepalen wat er gebeurt als er al overeenkomende documenten zijn in de collectie waarin u probeert te importeren.

Standaard mongoimport gebruikt insert modus, maar er zijn andere modi die u kunt gebruiken. De modus die je gebruikt, hangt af van wat je probeert te doen.

Hieronder vindt u een overzicht van elke modus, samen met voorbeelden.

De modi

De importmodi die beschikbaar zijn in mongoimport zijn als volgt:

Modus Beschrijving
insert Dit is de standaardmodus. In deze modus worden de documenten uit het importbestand ingevoegd. Als er al een overeenkomend document in de collectie bestaat, treedt er een fout op. Een overeenkomend document is een document met dezelfde unieke ID (zoals een overeenkomende _id veld) als een document in het importbestand.
upsert Vervangt bestaande documenten in de database door overeenkomende documenten uit het importbestand. Alle andere documenten worden ingevoegd.
merge Samenvoegen bestaande documenten die overeenkomen met een document in het importbestand met het nieuwe document. Alle andere documenten worden ingevoegd.
delete Verwijdert bestaande documenten in de database die overeenkomen met een document in het importbestand. Alle niet-overeenkomende documenten hebben geen effect.

Hieronder vindt u voorbeelden van hoe elke modus werkt.

Invoegmodus

Stel dat we een verzameling hebben met de naam pets met de volgende documenten:

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

Het bleek dat die werden geïmporteerd in een bestand met de naam pets.json .

Stel je nu voor dat we nog een JSON-bestand hebben met de naam pets2.json , dat de volgende JSON-documenten bevat:

{ "_id" : 1, "weight": 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 }

Dit is wat er gebeurt als we dat proberen te importeren in onze pets verzameling tijdens het gebruik van (de standaard) insert modus.

mongoimport --db=PetHotel --collection=pets --file=pets2.json

Uitgang:

2021-01-03T10:07:23.421+1000	connected to: mongodb://localhost/
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 1 }
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 2 }
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 3 }
2021-01-03T10:07:23.423+1000	1 document(s) imported successfully. 3 document(s) failed to import.

Volgens die foutmelding is slechts één van de vier documenten geïmporteerd. De andere drie veroorzaakten een fout vanwege een dubbele sleutel in de _id veld.

Laten we nu naar de collectie kijken.

db.pets.find()

Resultaat:

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

We kunnen dus zien dat het laatste document is ingevoegd. Dit is te verwachten, omdat we niet eerder een document hadden met een _id waarde van 4 .

Upsert-modus

Dit is wat er gebeurt als we upsert gebruiken modus om hetzelfde document in te voegen.

mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json

Uitgang:

2021-01-03T10:19:55.400+1000	connected to: mongodb://localhost/
2021-01-03T10:19:55.444+1000	3 document(s) imported successfully. 0 document(s) failed to import.

De uitvoer vertelt ons dat 3 van de 4 documenten succesvol zijn geïmporteerd en dat er geen fouten zijn opgetreden.

Laten we de collectie eens bekijken.

db.pets.find()

Resultaat:

{ "_id" : 1, "weight" : 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }

We kunnen zien dat de eerste drie documenten zijn vervangen door de documenten uit het importbestand. Het vierde document blijft hetzelfde als na de vorige import.

Merk op dat het eerste document zijn name heeft verloren en type velden. Dit komt omdat de upsert modus vervangt het hele document, en ons vervangende document heeft alleen het weight veld (evenals de _id veld).

Samenvoegmodus

Laten we onze pets2.json aanpassen bestand zodat het er als volgt uitziet:

{ "_id" : 1, "name": "Wag", "type": "Dog" }
{ "_id" : 2, "name" : "Fetch" }
{ "_id" : 3, "name" : "Scratch" }
{ "_id" : 4, "name" : "Bubbles" }
{ "_id" : 5, "name" : "Hop", "type": "Kangaroo" }

Laten we nu de mongoimport . uitvoeren commando opnieuw, maar deze keer in merge modus:

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

Uitgang:

2021-01-03T10:32:33.596+1000	connected to: mongodb://localhost/
2021-01-03T10:32:33.607+1000	3 document(s) imported successfully. 0 document(s) failed to import.

Volgens de output zijn er 3 documenten geïmporteerd.

Laten we de collectie eens bekijken.

db.pets.find()

Resultaat:

{ "_id" : 1, "weight" : 40, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
{ "_id" : 5, "name" : "Hop", "type" : "Kangaroo" }

We kunnen zien dat de documenten 1 en 2 zijn bijgewerkt en dat document 5 is ingevoegd. Wat betreft document 1, het weight veld bleef staan, ook al bevatte het importdocument dat veld niet. Dit komt omdat we merge hebben gebruikt modus. Als we upsert . hadden gebruikt modus (zoals in het vorige voorbeeld), het weight veld zou zijn verdwenen.

Verwijdermodus

Wanneer je delete gebruikt modus, worden alle overeenkomende documenten eenvoudig verwijderd. Niet-overeenkomende documenten blijven in de collectie.

Dus laten we eens kijken wat er gebeurt als we hetzelfde document importeren, maar deze keer overschakelen naar delete modus.

mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json

Resultaat:

2021-01-03T10:39:38.925+1000	connected to: mongodb://localhost/
2021-01-03T10:39:38.926+1000	5 document(s) deleted successfully. 0 document(s) failed to delete.

Alle 5 documenten in de collectie zijn verwijderd.

De Upsert-veld(en) wijzigen

U kunt de --upsertFields . gebruiken parameter om een ​​ander veld dan _id op te geven tegen te matchen. Wanneer u deze parameter gebruikt, geeft u de velden door als een door komma's gescheiden lijst.

Niet zeker of je mongoimport . hebt ?

mongoimport maakt deel uit van het MongoDB Database Tools-pakket. De MongoDB Database Tools zijn een reeks opdrachtregelhulpprogramma's voor het werken met MongoDB.

Als u niet zeker weet of u over de MongoDB Database Tools/mongoimport beschikt geïnstalleerd, probeer dan het volgende commando in je Terminal of Command Prompt uit te voeren om te controleren:

mongoimport --version

Als je het hebt, zou je versie-informatie, enz. moeten zien. Als je het niet hebt, kun je de installatie-instructies op de MongoDB-website gebruiken om het op je systeem te installeren.

Waar kunt u mongoimport uitvoeren Commando's?

U moet mongoimport . uitvoeren opdrachten vanaf de opdrachtregel van uw systeem (bijvoorbeeld een nieuw Terminal- of opdrachtpromptvenster).

Voer ze niet uit vanuit de mongo schelp.


  1. Werk een waarde in MongoDB bij op basis van de huidige waarde

  2. MongoDB - Hoe zit het met het decimale type waarde?

  3. MongoDB vergelijkt alleen datums zonder tijden

  4. Meerdere $elemMatch-expressies voor het matchen van arraywaarden met $all in MongoDB?