Když použijete mongoimport pro import souborů do MongoDB máte možnost nahradit existující dokumenty, které odpovídají těm, které importujete.
Tím myslím, pokud má importovaný dokument stejné _id hodnotu jako existující v kolekci, do které importujete, stávající dokument bude nahrazen tím, který se importuje.
Můžete také zadat jiné pole (jiné než _id pole), které bude v případě potřeby odpovídajícím polem.
Způsob, jak nahradit existující dokumenty při použití mongoimport je použít upsert režimu.
Příklad
Předpokládejme, že máme sbírku nazvanou pets které obsahují následující dokumenty:
db.pets.find() Výsledek:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
A máme následující soubor JSON s názvem pets.json :
{"_id":2,"name":"Fetch","type":"Dog"}
{"_id":3,"name":"Scratch","type":"Cat","weight":10}
{"_id":4,"name":"Hop","type":"Kangaroo","weight":60} Následující příkaz importuje soubor JSON do kolekce:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Toto používá upsert k nahrazení odpovídajících dokumentů těmi importovanými.
Zkontrolujte výsledky
Pojďme se nyní na kolekci podívat.
db.pets.find() Výsledek:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog" }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 }
{ "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Vidíme, že dokument 2 byl zcela nahrazen. Pes Bark byl nahrazen psem Fetch a pro Fetch není zaznamenána žádná váha .
Dokument 3 byl také nahrazen a dokument 4 je zcela nový dokument.
Změňte pole/pole Upsert
Můžete použít --upsertFields parametr k určení jiného pole než _id proti kterému zápasit. Při použití tohoto parametru předávejte pole jako seznam oddělený čárkami.
Předpokládejme, že máme další soubor JSON s názvem pets2.json který chceme importovat, a vypadá to takto:
{"name":"Fetch","type":"Dog","weight":20,"gooddog":true}
{"name":"Scratch","type":"Cat","weight":15}
{"name":"Bubbles","type":"Fish"}
Tento dokument neobsahuje _id pole, takže bychom museli porovnávat s jinými poli, která jedinečně identifikují každý dokument. V tomto případě bychom mohli použít name a type pole.
Můžeme tedy použít následující mongoimport příkaz:
mongoimport --db=PetHotel --collection=pets --mode=upsert --upsertFields=name,type --file=data/pets2.json Nyní znovu zkontrolujeme sbírku:
db.pets.find() Výsledek:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 }
{ "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
{ "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }
Vidíme, že Fetch byl aktualizován/nahrazen (ale _id hodnota zůstává stejná). To samé se Scratchem.
Bubliny na druhé straně neměly žádnou shodu s horními poli, a proto byly vloženy.
Vyhledejte 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 příkazy?
Nezapomeňte, že 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.