sql >> Databáze >  >> NoSQL >> MongoDB

Režimy importu mongoimportu

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.


  1. SQL RPAD()

  2. Jak StackExchange.Redis používá více koncových bodů a připojení?

  3. Jak získat hodnoty z Redis pomocí klíčů, které obsahují mezery?

  4. Upgrade HBase nad architekturou Event Sourcing a CQRS za 3 týdny