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.