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.