Při použití mongoimport pro import souborů do MongoDB máte možnost určit režim, který chcete použít. Tyto režimy určují, co se stane, pokud již v kolekci, do které se pokoušíte importovat, jsou odpovídající dokumenty.
Ve výchozím nastavení mongoimport používá insert režimu, ale můžete použít i další režimy. Režim, který použijete, bude záviset na tom, co se snažíte dělat.
Níže je uveden přehled každého režimu spolu s příklady.
Režimy
Režimy importu dostupné v mongoimport jsou následující:
| Režim | Popis |
|---|---|
insert | Toto je výchozí režim. Tento režim vloží dokumenty z importovaného souboru. Pokud již odpovídající dokument v kolekci existuje, dojde k chybě. Odpovídající dokument je dokument, který má stejné jedinečné ID (například odpovídající _id pole) jako dokument v souboru importu. |
upsert | Nahradí existující dokumenty v databázi odpovídajícími dokumenty ze souboru importu. Všechny ostatní dokumenty jsou vloženy. |
merge | Sloučí existující dokumenty, které odpovídají dokumentu v importovaném souboru, s novým dokumentem. Všechny ostatní dokumenty jsou vloženy. |
delete | Odstraní existující dokumenty v databázi, které odpovídají dokumentu v importovaném souboru. Jakékoli neodpovídající dokumenty nemají žádný účinek. |
Příklady fungování jednotlivých režimů jsou uvedeny níže.
Režim vložení
Předpokládejme, že máme sbírku nazvanou pets s následujícími dokumenty:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
Jak se ukázalo, byly importovány do souboru s názvem pets.json .
Nyní si představte, že máme další soubor JSON s názvem pets2.json , který obsahuje následující dokumenty JSON:
{ "_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 }
Co se stane, když se to pokusíme importovat do našich pets kolekce při použití (výchozí) insert režimu.
mongoimport --db=PetHotel --collection=pets --file=pets2.json Výstup:
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.
Podle této chybové zprávy byl importován pouze jeden ze čtyř dokumentů. Další tři způsobily chybu kvůli duplicitnímu klíči v _id pole.
Nyní se podíváme na sbírku.
db.pets.find() Výsledek:
{ "_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 }
Můžeme tedy vidět, že byl vložen poslední dokument. To se očekává, protože jsme dříve neměli dokument s _id hodnotu 4 .
Režim Upsert
Co se stane, když použijeme upsert režimu pro vložení stejného dokumentu.
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json Výstup:
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.
Výstup nám říká, že 3 ze 4 dokumentů byly úspěšně importovány a že nedošlo k žádným selháním.
Podívejme se na sbírku.
db.pets.find() Výsledek:
{ "_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 } Vidíme, že první tři dokumenty byly nahrazeny dokumenty ze souboru importu. Čtvrtý dokument zůstává stejný jako po předchozím importu.
Všimněte si, že první dokument ztratil svůj name a type pole. Je to proto, že upsert režim nahradí celý dokument a náš náhradní dokument má pouze weight pole (stejně jako _id pole).
Režim sloučení
Upravme náš pets2.json soubor tak, aby vypadal takto:
{ "_id" : 1, "name": "Wag", "type": "Dog" }
{ "_id" : 2, "name" : "Fetch" }
{ "_id" : 3, "name" : "Scratch" }
{ "_id" : 4, "name" : "Bubbles" }
{ "_id" : 5, "name" : "Hop", "type": "Kangaroo" }
Nyní spustíme mongoimport příkaz znovu, ale tentokrát v merge režim:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=pets2.json Výstup:
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.
Podle výstupu byly importovány 3 dokumenty.
Pojďme se podívat na sbírku.
db.pets.find() Výsledek:
{ "_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" }
Vidíme, že dokumenty 1 a 2 byly aktualizovány a dokument 5 byl vložen. Pokud jde o dokument 1, weight pole zůstalo, i když importní dokument toto pole neobsahoval. Je to proto, že jsme použili merge režimu. Pokud bychom použili upsert režimu (jako v předchozím příkladu), weight pole by zmizelo.
Režim mazání
Když použijete delete režimu, všechny odpovídající dokumenty jsou jednoduše odstraněny. Neodpovídající dokumenty zůstávají ve sbírce.
Pojďme se tedy podívat, co se stane, když importujeme stejný dokument, ale tentokrát přepněte na delete režimu.
mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json Výsledek:
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.
Všech 5 dokumentů ve sbírce bylo smazáno.
Změna pole/polí Upsert
Můžete použít --upsertFields parametr k určení jiného pole než _id zápasit proti. Při použití tohoto parametru předávejte pole jako seznam oddělený čárkami.
Nejsem si jistý, zda máte mongoimport ?
mongoimport je součástí balíčku databázových nástrojů MongoDB. Databázové nástroje MongoDB jsou sada nástrojů příkazového řádku pro práci s MongoDB.
Pokud si nejste jisti, zda máte MongoDB Database Tools/mongoimport nainstalovaný, zkuste spustit následující příkaz v terminálu nebo příkazovém řádku a zkontrolujte:
mongoimport --version Pokud ji máte, měli byste vidět informace o verzi atd. Pokud ji nemáte, můžete ji nainstalovat do svého systému pomocí pokynů k instalaci na webu MongoDB.
Kde spustit mongoimport Příkazy?
Musíte spustit mongoimport příkazy z příkazového řádku vašeho systému (např. nový terminál nebo okno příkazového řádku).
Nespouštějte je z mongo skořápka.